Я начинаю программировать и запускать этот код в Java
String demo = "This is first string";
char ch[]= demo.toCharArray();
System.out.println(ch);
Вывод:
This is first string
в то время как,
System.out.println("result is "+ch);
Вывод: - (Отображение hashcode, связанного с памятью объекта)
result is: someHashcode
1) Почему у нас есть другой выход для обоих из них (вышеупомянутый код)? Что на самом деле происходит здесь.
И с другой стороны
int num[]={1,2,3,4};
System.out.println(num);
вывод:-
somehashcode
2) Это не работает, как в случае с массивом символов (как, например, упомянутый выше код), и дает результат как hashcode, Why?
PrintStream
перегрузил метод println
для массива символов. Когда вы передаете ему массив символов, он печатает символы из него, как если бы это была строка.
Hovewer, когда вы передаете массив других типов, он рассматривает его как объект - toString()
его представление toString()
.
И в этом примере:
System.out.println("result is "+ch);
Вы добавляете массив к строковому литералу, поэтому toString
форма ch
будет добавлена в литерал, поэтому вы не получите ожидаемого результата.
out
является статической переменной в классе System
типа PrintStream
. Таким образом, он имеет доступ к методам println(String)
и println(char[])
(среди многих других). Теперь PrintStream#print(char[])
будет печатать все символы из переданного массива, но в случае "result is "+ch
этот код будет преобразован в String
, а не в char[]
потому что когда вы используете +
и один из Операндом является String, а другим - нет, компилятор объединит эти значения с помощью StringBuilder, который для объектов, не относящихся к String, добавляет результаты метода toString()
(который для массивов возвращает тип @ hexhash.