четверг, 18 января 2007 г.

Java Puzzle 12: ABC

String letters = "ABC";
char[] numbers[] = {'1', '2', '3'};
System.out.print(letters + " easy as " + numbers);
Что будет напечатано?

А если попробовать так:
String letters = "ABC";
char[] numbers = {'1', '2', '3'};
System.out.print(letters);
System.out.print(" easy as ");
System.out.print(numbers);
то будет ожидаемый результат:
ABC easy as 123

А с небольшим изменением:
String letters = "ABC";
Object numbers = {'1', '2', '3'};
System.out.print(letters);
System.out.print(" easy as ");
System.out.print(numbers);
результат опять будет неправильным.

Дело в том, что при конкатенации строк используется метод toString(). А массив символов, как и любой другой массив, не переопределяет этот метод. В то же время, класс PrintStream определяет метод print(char[]), который корректно выводит символы в поток. Однако, в третьем случае вызывается метод print(Object), который несмотря на то, что аргумент - массив символов, вызывает у него метод toString().
Для преобразования массива символов к строке авторы рекомендуют использовать метод String.valueOf(char[]).

Комментариев нет:

Отправить комментарий