2016-02-13 4 views
0

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

version1:

char c = 'a'; 
c = c + 1; 

version2:

char c = 'a'; 
c += 1; 

К моему удивлению, , вторая версия компилируется и запускается успешно, но первая показывает ошибку, которая говорит о несовместимых типах: lossy conversion from int to char. Почему они разные?

ответ

2

Второй вариант включает в себя приведение, и эквивалентно:

c = (char) (c + 1); 

См JLS section 15.26.2 (соединение операторов):

Выражение присваивания соединения формы E1 op= E2 эквивалентен E1 = (T) ((E1) op (E2)), где T - тип E1, за исключением того, что E1 оценивается только один раз.

+0

Я видел, как кто-то отправлял вопросы, используя первую версию, и код тоже работает. Почему мы получаем разные результаты? См. Здесь: http://stackoverflow.com/questions/17124992/incrementing-char-type-in-java – Gropai

+0

@Gropai Я не могу воспроизвести это поведение. Я получаю предупреждение потери точности в Java9 jShell и Java 8 javac. – hexafraction

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