Почему существует разница между System.out.println(+c1) и System.out.println(c1 = +c1)?

Когда я использую:

char c1 = '\u534e';
System.out.println(+c1);

Затем я получаю:

21326

Но когда я использую:

char c1 = '\u534e';
System.out.println("c1 = " +c1);

Затем я правильно распечатал char:

c1 = 华

В чем проблема?


person Leo Li    schedule 07.05.2017    source источник
comment
Все это сводится к тому, что на самом деле представляет собой +c1 в System.out.println(+c1);, поэтому я думаю, что обман здесь хорош.   -  person Tom    schedule 07.05.2017


Ответы (1)


В вашем вопросе есть 3 сценария:

<сильный>1. System.out.println(+c1);

Добавление + с типом char преобразует его в int, поэтому будет вызываться метод println(int) из System.out, превращая его в выведите целочисленное значение для этого символа.

<сильный>2. System.out.println(c1);

В этом случае мы не добавили +, поэтому он по-прежнему принимается за char, поэтому в этом случае будет вызываться println(char) и это приведет к печати фактического символа.

<сильный>3. System.out.println("c1 = " +c1);

Когда мы объединяем тип char с String, вся конкатенация будет рассматриваться как String, поэтому в этом случае будет вызываться println(String) и печатается фактический символ с остальной частью строки.

person Nishesh Pratap    schedule 07.05.2017
comment
СПАСИБО ЗА ВЕЛИКОЛЕПНЫЙ ОТВЕТ! Но у меня все еще есть небольшая путаница: почему System.out.println(+c1) сделал тип char типом int? Я имею в виду, когда я печатал в формате System.out.println(), разве все в скобках не должно быть изменено на тип char? - person Leo Li; 08.05.2017