Java值加变量++
请考虑以下代码
int val1 = 3; val1++; int val2 = val1++; System.out.println(val1); System.out.println(val2);
Val1值= 5; Val2值= 4;
为什么Val1的值为“5”?
据我所知,它应该是4,因为:在第1行,它被赋值为3,在第2行上,通过val1 ++添加,这导致val1为4。
Val2是val1的值,因此4加1,即5
如果编译器给val1一个值为5,val2给一个值为4,我在这里不理解或缺少什么?
我意识到第二次使用val1 ++但它被分配给val2,并且不应该影响val1s值,或者我错了吗?
a++
被称为后缀。
将1
添加到a
,返回旧值。
++a
被称为前缀。
将1
添加到a
,返回新值。
所以int val2 = val1++;
将返回旧值(4)
并仍然向val1添加一个
您可以通过增加变量
val1++
或者使用
++val1
第一个选项首先执行分配,然后增加val1。 长版:
val2 = val1; val1 = val1 + 1;
第二个选项首先执行增量,然后将新值分配给val2。 这种行为的长版本:
val1 = val1 + 1; val2 = val1;
因为后缀增量运算符在赋值给val2
之后向val1
添加一个,如果你想使val2
等于5,你应该使用:
int val2 = ++val1;
后缀表达式后跟++运算符是后缀增量表达式。 后缀增量表达式的值是存储新值之前变量BEFORE的值(递增)。
回顾一下:
Post Increment ( val++
):首先执行语句然后将值增加1。 Pre Increment ( ++val
):首先将值增加1然后执行语句。
基本上,
int val2 = val1++;
具有与以下相同的效果:
int val2 = val1; val1++;
val++
是后增量操作 。
在后递增/递减操作中, 首先分配值然后递增/递减 。
所以, y = x++
相当于
y = x
x=x+1
在您的情况下, val2
被赋值为val1
旧值 , val1
递增,输出为
Val2 = 4
VAL1 = 5
这很简单:
int val2 = val1 ++; <---这句话的作用是这样的
第1步 :初始化int val2
第2步 :将val1的值赋给val2
步骤3 :val1的值增加1。
++
运算符分为两个阶段:
- 返回
val1
当前值 - 将
val1
加1
因此,在您的方案中,首先将1添加到val1(但不打印它)。其次,您将val2
值分配给val1,但在赋值后,运算符++将val1
1。
至于您的更新问题:当您将val1++
分配给变量时,首先从val1复制值,然后将其分配给val2
,然后再增加val1。 这就是为什么你有这样的结果。 整数和基元都是按值复制的,而不是参考,因此更改为val1
不会影响val2
。
为了更好地理解它,尝试用++val1
替换val1++
。 这样你首先增加值,然后返回它,那么你应该有val1==val2==5
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++
val++
是一个Postfix Increment操作,它在变量增加之前产生存储在变量中的原始纯值。
您可以查看增量/减量运算符以获取更多信息。
在你的情况下:
int val2 = val1++;
在递增之前将val1
的值设置为val2
,这就是为什么你在val2
得到4
作为值,在val1
得到5
。
注意:
如果您不希望您的操作影响val1
值,您应该这样做:
int val2 = val1+1;