1

Вывод следующего кода Java не понят. Может кто-нибудь, пожалуйста, скажите мне, как это работает?Как работает Java Println при оценке специальных символов и арифметических операций?

int i=5; 
System.out.println(i+'+');// Output is 48 
System.out.println(i+'-');// Output is 50 
System.out.println(i+'*');// Output is 47 
System.out.println(i+'%');// Output is 42 
System.out.println(i+'/');// Output is 52 
+0

Это не имеет никакого отношения к 'println()'. Правила - это обычные правила Java. – EJP

+0

Возможно, вы захотите выбрать ответ и пометить его как решение (зеленая галочка). – user1803551

ответ

1

char тип данных представляет собой одну 16-bit Unicode character.The значение + является 43.

Так,

System.out.println(i+'+'); //prints 48 

Java определяет type promotion rules, которые применяются к выражений.

Во-первых, все байт, короткой и символ значения повышаются до Int. Затем, если один из операндов длинный, все выражение выражается в long.

+1

Не * ASCII *, UTF-16. Но да. Можно использовать объяснение, почему 'int + char' является' int'. –

+0

Означает ли это, когда мы используем оператор '+' для добавления/конкатенации целого числа, а char - целочисленного значения? Точно так же, как String и другие типы данных, используемые с оператором '+', становятся String. –

+0

'char' повышается до эквивалента' int' в выражении, а затем выполняется операция. – thegauravmahawar

0

ASCII - Wikipedia

см ссылку выше, чтобы узнать больше о ASCII кодах.

Выражение

(я + '+')

имеет значение (я + 43), а '+' в настоящее время рассматривается как символ здесь он преобразуется в это соответствующее ASCII-код (который бывает 43) при добавлении в целое число I, которое равно 5.

остальное идет собой разумеется, что 5 + 43 = 48.

Это называется неявным литьем в java.

См. widening primitive conversion.

1

Ваш лучший друг является JLS:

15.18.2. Аддитивные операторы (+ и -) для числовых типов

Бинарный оператор + выполняет сложение, когда применяется к двум операндам числового типа, производя сумму операндов.

Двоичное числовое продвижение выполняется в операндах (§5.6.2).

Для объяснения "операнды числового типа":

4.2.Примитивные типы и значения

Числовые типы являются интегральными типами и типами с плавающей точкой.

Совокупные типы представляют собой байтовые, короткие, int и long, ... и символы, значения которых представляют собой 16-разрядные целые числа без знака, представляющие кодовые единицы UTF-16 (§3.1).

И объяснить "Двоичное цифровое продвижение":

5.6.2. Binary Числового Promotion

Когда оператор применяет двоичную цифровую продвижение к паре операндов, каждый из которых должен обозначать значение, которое конвертируется в числовой тип, то применяются следующие правила, в следующем порядке:

  1. Если какой-либо операнд имеет ссылочный тип, он подвергается распаковке преобразования (п. 5.1.8).

  2. Widening примитивные преобразования (§5.1.2) применяется для преобразования либо или оба операнда, как указано по следующим правилам:

    Если один из операндов имеет тип двойной, а другой преобразуется в двойной.

    В противном случае, если любой из операндов имеет тип float, другой конвертируется для плавания.

    В противном случае, если один из операндов имеет длинный тип, другой конвертируется в длинный.

    В противном случае оба операнда преобразуются в тип int.

(курсив мой)

Так как ИНТ и полукокс числовые типы, они подвергаются двоичный цифровой преобразование, которое преобразует символ в целое число с помощью UTF-16.