2016-08-31 5 views
0

Я обсуждал вопросы Java, а затем нашел это. Я не могу понять, почему для этого code-Расширение примитивного Conversio

public class File 
{ 
    public static void main(String[] args) 
    { 
     System.out.println('H'+'I'); 
    } 
} 

Выход на 145 и для этого code-

public class File 
{ 
    public static void main(String[] args) 
    { 
     System.out.print('H'); 
     System.out.print('I'); 
    } 
} 

Выход HI.

В первом случае, я знаю, что вывод является добавлением значений ASCII 'H' и 'I', но для второго случая он не отображает значения ASCII, почему так? Спасибо!

+0

«H» и «I» - это каждое значение буквального символа, которое является примитивным типом данных для [Character] (https://docs.oracle.com/javase/8/docs/api/java/lang/Character .html). Оба типа данных используют UTF-16, а не ASCII. См. Документы. –

ответ

2

Как описано в JLS Sec 15.18:

Если тип любого операнда оператора + является строкой, то операция конкатенации. ...

Оператор binary + выполняет добавление при применении к двум операндам числового типа, создавая сумму операндов.

В первом случае у вас есть два символа (не строки), поэтому они расширяются до Интс, и добавили, а затем передается в System.out.print(int) для печати.

Во втором случае вы вызываете метод System.out.print(char), который печатает char в качестве символа. Вы вызываете это дважды, так что вы получаете два символа.

 Смежные вопросы

  • Нет связанных вопросов^_^