2014-03-18 6 views
3

я следующий код в Javaпост инкремент с добавлением в Java

int x=5; 
System.out.println(x++ + ++x); 

Выход 12.

Я подумал, что это должно быть 11.

У нас есть три оператора здесь:

  • + добавление
  • ++ (пост)
  • ++ (предварительно)
  • товар

список, в котором порядок не выше оператор печати компилировать?

Если я пишу int x=5;, а затем ++x, делает x==6 или x==5, как я не написал x=++x. Сохраняется ли новое значение в x?

Ищете способ запоминать приоритет оператора в Java или .NET, как и у DMAS. Для них тоже есть аналогия?

+2

Вы осознаете, что люди не стали бы задавать такие вопросы, если бы они просто перестали делать глупые вещи, не так ли? :-) Серьезно, кто черт пишет код как 'x ++ + ++ x'? – paxdiablo

+0

@paxdiablo Что делать, если на экзамене я должен написать вывод следующего утверждения, через него нести только 1 знак, должен ли я сказать «кто черт сделал этот вопрос»? :) –

+0

@ user1765876 Во всей серьезности я бы () ответьте на него и (б) спросите профессора, почему они задают такой вопрос, учитывая, что это то, что вы не должны видеть в этой области. Но тогда я говорю это с комфортом последипломного мира, где профессора больше не могут влиять на меня. ;) – yshavit

ответ

5

x++ соответствует 5, но x стал 6. ++x средства 6 увеличивается на 1, что составляет ++x, является 7. Правильный ответ 5 + 7 = 12.

2

В C и C++ этого вида вещи неопределенное поведение (поскольку в этих языках, + не последовательности два выражения).

Но на Java это определено. Порядок оценки - слева направо.

Это довольно просто: первое выражение x++ которое имеет значение 5, но увеличивает x до 6.

Второе выражение ++x которое увеличивает x от 6 до 7 и имеет значение 7.

5 + 7 = 12: Выполнено.

Излишне говорить, что такого рода код не рекомендуется. И порт C/C++ был бы страшным.

+0

+1 для упоминания это не определено в c/C++, прежде чем некоторые программисты начнут получать какие-либо идеи. Как будто c не была достаточно сложной в своей семантике – smac89

1

В строке

System.out.println(x++ + ++x); 

первого x является 5, поэтому после x++, x будет 6, но выражение будет вычисляться перед тем приращения, так что вы будете иметь:

5 + ++x 

в данный момент x составляет 6, поэтому ++x будет сначала увеличивать x до 7, а затем оценивать выражение. В конце вы получите:

5 + 7 

который 12.

0

Дело в том, что:

х ++ приращение х после присваивания в выражении. ++ x increment x ПЕРЕД присваиванием в выражении.

Таким образом, в вашем примере вы на самом деле 5 + 7. 5 Поскольку приращение делается после оценки, поэтому х стали 6. 7, поскольку приращение выполняется перед оценкой, поэтому х стали 7.

1

оценки/приращения будет происходить перед оператором +, один за другим

Ваш Println является, шаг за шагом:
(x++ + ++x) где х = 5
(5++ + ++x) где х = 5
(5 + ++x), где х = 6
(5 + x) где х = 7
(5 + 7) = 12

У Вас есть 2 приращения х, от 5 до 7, перед тем суммирования х, таким образом, объясняя общей сложности 12

1

post increment

используются

При оценке экспрессии только pre incremnted значения. (Post оператор инкремента используются только после завершения оценки выражения) Это может помочь вам

=x++ + ++x 
    =x++ + 6 
    =6 + 6 
    =12