2015-05-06 3 views
1

Рассмотрим следующий кодзначение Java плюс переменная ++

int val1 = 3; 
val1++; 
int val2 = val1++; 
System.out.println(val1); 
System.out.println(val2); 

значение Val1 = 5; Значение Val2 = 4;

Почему значение Val1 «5»?

Как я понимаю, это должно быть 4, потому что: в LINE1 он назначен значение 3, на line2 1 добавляется путем знач1 ++, которые приводят к знач1 будучи 4.

Val2 это значение of val1, таким образом, 4, плюс 1, который равен 5

И хотя компилятор дает val1 значение 5 и val2 значение 4, что я не понимаю или не вижу здесь?

Я понимаю, что val1 ++ используется во второй раз, но он назначен val2 и не должен влиять на значение val1s, или я ошибаюсь?

+0

Если у вас есть ответ, что лучше, чем сейчас, пожалуйста, опубликуйте его как ответ. – Flexo

ответ

8

a++ известен как постфикс.

добавить 1 в a, возвращает старое значение.

++a известен как префикс.

добавить 1 в a, возвращает новое значение.

так int val2 = val1++; вернет старое значение (4)

и еще добавить один к знач1

1

Поскольку оператор приращения постфикса добавьте к val1 после присвоения val2, если вы хотите иметь val2 равный 5 тоже следует использовать:

int val2 = ++val1; 

А выражение постфикса следует оператор ++ является выражением приращения постфикса. Значение выражения postfix increment представляет собой значение переменной ПЕРЕД новым значением сохраняется (увеличивается).

Напомним:

Сообщение Increment (val++): Сначала выполнить оператор затем увеличить значение на единицу. Pre Increment (++val): Сначала увеличьте значение на единицу, затем выполните инструкцию.

0

++ оператора aworks в 2 этапа:

  • возвращает текущее значение val1
  • добавить 1 до val1

Так что в вашем случае, нужно сначала добавить 1 к знач1 (но не печатать) Во-вторых, назначаемый val2 стоимости знач1, но после назначения его оператора значение ++ добавляет 1 к val1.

Что касается вашего вопроса об обновлении: когда вы назначаете val1++ переменной, вы сначала копируете значение из val1, а затем присваиваете его val2 и в-третьих, увеличиваете val1. Вот почему у вас такой результат. Целые числа, а также примитивы копируются по значению, а не по ссылке, поэтому изменить на val1 не будет afect val2.

Для лучшего понимания, попробуйте заменить val1++ на ++val1. Таким образом, вы будете сначала увеличиваете значение, а затем вернуть его, то вы должны иметь val1==val2==5

1

Вы можете увеличивать переменные,

val1++ 

или с помощью

++val1 

Первого варианта выполняемых сначала присваивается, а затем увеличивается val1. Длинная версия:

val2 = val1; 
val1 = val1 + 1; 

Вторая опция выполняет первый шаг и присваивает новое значение val2. Длинная версия этого поведения:

val1 = val1 + 1; 
val2 = val1; 
0

В основном,

int val2 = val1++; 

имеет тот же эффект, как:

int val2 = val1; 
val1++; 
0

val++ является операция пост-инкремент.

В операции после инкремента/декремента значение назначено первым, затем оно увеличивается/уменьшается.

Итак, y = x++ эквивалентно
y = x
x=x+1

В вашем случае, val2 присваивается старое значение из val1 и val1 увеличивается, что дает выход как
val2 = 4
Val1 = 5

0

Его простота:

int val2 = val1 ++; < --- это утверждение работает как этот

Шаг 1: INT val2 инициализируется

Шаг 2: значение VAL1 в присваивается знач2

Шаг 3: значение знач1 приращение на 1.

0
int val1 = 3; here val1=3 
val1++;  here val1=4 
int val2 = val1++; 
and thus val1 becomes 5 and val2 also becomes 5 because before you assign value to val2 you increment as val1++ 
0

val++ является оператором Postfix Increment , которое производит исходное чистое значение, хранящееся в переменной, до того, как оно будет увеличено.

Для получения дополнительной информации вы можете ознакомиться с Increment/Decrement Operators.

В вашем случае:

int val2 = val1++; 

Будет установлено значение val1 для val2 перед увеличением его, поэтому вы получили 4 в качестве значения в val2 и 5 в val1.

Примечание:

И если вы не хотите, чтобы ваша работа, чтобы повлиять на val1 значение, вы должны сделать это:

int val2 = val1+1; 
Смежные вопросы