2013-09-06 3 views
-2
char char1 = 'a'; 
System.out.println(char1);  //prints char 1 
System.out.println(char1+1); //prints char 1 
System.out.println(char1++);  //prints char 1 
System.out.println(char1+=1); //prints incremented char1 
char1 += 1;      
System.out.println(char1);  //prints incremented char1 

В приведенном выше примере почему (char1 + 1) или (char ++) печатать увеличивающийся символ, а другие два?Почему в System.out.println() не добавляется символ?

+3

Это даже не действительная Java. -1 – Doorknob

+0

Как только код будет правильно отформатирован (скомпилирован), он отлично работает для меня .. – MadProgrammer

+0

Это была опечатка, это правильно в моем коде. –

ответ

7

Во-первых, я предполагаю, что, потому что вы говорите, приращение System.out.println работ, что вы действительно указано:

char char1 = 'a'; 

EDIT

В ответ на изменение вопроса (char1+1; =>char1 += 1;) Я вижу проблему. Выход

a 
98 
b 

98 показывает вверх, так как символ a был повышен до int (двоичного цифрового поощрения) для добавления 1. Таким образом, становится a 97 (значения ASCII для 'a') и 98 результатов.

Однако char1 += 1; или char1++ не выполняет двоичное числовое продвижение по службе, поэтому он работает должным образом.

Цитируя JLS, Section 5.6.2, "Binary Numeric Promotion":

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

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

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

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

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

(курсив мой)

+0

Ну, что объясняет числа из char +1, но не моя другая проблема ... char ++ просто ничего не делает, если я ввожу char ++, когда char является a, он просто печатает a, но если я делаю char ++; * Перед тем, как сделать, печать ..., работа. –

+0

Это то, что делает оператор post-increment. Он увеличивает его, но значение выражения - значение _old_, '' a''. – rgettman

+0

OH! Я вижу, мне нужно использовать pre increment. Правильно. Спасибо :) Я совсем забыл об этом маленьком нюансе. –

1

Вы не назначили результат добавления char1+1 на номер char1. Так

char1 = char1 + 1;

или

char1 += 1; char1++; являются правильными.

+0

Возможно, вам следует пояснить, почему они правильные :) (И почему его код неверен) –

+0

Если вы, конечно, не можете объяснить, почему ваша версия верна, а его неверно ... –

+0

Извините, я ответил глупый комментарий допрашивающего, но он был удален. – qsona

0

попробовать это.

System.out.println(char1); 
System.out.println(++char1); 
char1 += 1; 
System.out.println(char1); 

вместо

char1 = a; 
System.out.println(char1); 
system.out.println(char1+1); 
char1 += 1; 
System.out.println(char1); 
1

Хорошо, прежде всего, фиксируя формат кода:

char char1; 
char1 = 'a'; 
System.out.println(char1);   // print 1 
System.out.println(char1 + 1);  // print 2 
char1 += 1; 
System.out.println(char1);   // print 3 

, который дает выход:

a 
98 
b 

Теперь, давайте посмотрите на каждый вызов println() в deta il:

1: Это просто берет дескриптор символа с именем char1 и печатает его. Ему была назначена буква a (обратите внимание на одинарные кавычки вокруг a в задании, указывающие символ). Неудивительно, что это печатает символ a.

2: Для этой линии вы выполняете целочисленное добавление. A char in java имеет знак unicode. Значение unicode для буквы a сопоставляется с номером 97. (Обратите внимание, что это также соответствует значению ASCII для a). При выполнении арифметических операций в Java между несогласованными типами значение меньшего/менее точного значения типа будет «обновлено» до более крупного типа (это очень неточно указано). Из-за этого символ «обновляется» до int до того, как выполняется добавление, и результатом также является int. Имея это в виду, неудивительно, что 97 из +1 приводит к печати 98.

3: В этом случае мы снова печатаем значение символа, поэтому печатается символ. На этот раз 98, которые мы увидели сгенерированными ранее, неявно лидируют назад в символ. Опять же, неудивительно, что следующее наибольшее числовое отображение из a равно b, поэтому мы видим, что b напечатан.

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