考虑以下代码
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
HOwever编译器给val1一个值为5,val2给一个值为4,这里我不理解或缺少什么?
我意识到第二次使用val1 ++但它被分配给val2,并且不应该影响val1s值,或者我错了吗?
答案 0 :(得分:9)
a++
称为后缀。
将1
添加到a
,返回旧值。
++a
称为前缀。
将1
添加到a
,返回新值。
因此int val2 = val1++;
将返回旧值(4)
并仍然将一个添加到val1
答案 1 :(得分:1)
因为后缀增量运算符在赋值给val1
后向val2
添加一个,如果你想让val2
等于5,你应该使用:
int val2 = ++val1;
后缀表达式后跟++运算符是后缀增量表达式。 后缀增量表达式的值是存储新值之前变量的值(递增)。
回顾一下:
发布增量(val++
):首先执行语句,然后将值增加1。
预增量(++val
):首先将值增加1然后执行语句。
答案 2 :(得分:1)
您可以按
增加变量val1++
或使用
++val1
第一个选项首先执行分配,然后增加val1。长版:
val2 = val1;
val1 = val1 + 1;
第二个选项首先执行增量,然后将新值分配给val2。这种行为的长版本:
val1 = val1 + 1;
val2 = val1;
答案 3 :(得分:0)
++
运营商分为两个阶段:
val1
val1
所以在你的场景中,你首先将1添加到val1(但你不打印它)
其次,您为val1的val2
值赋值,但在赋值后,运算符++将{1}}加1。
关于更新问题:当您为变量分配val1
时,首先从val1复制值,然后将其分配给val1++
,然后再增加val1。这就是为什么你有这样的结果。整数和基元都是按值复制的,而不是参考,因此更改为val2
不会影响val1
。
为了更好地理解它,请尝试将val2
替换为val1++
。通过这种方式,您将首先递增值,然后返回它,然后您应该++val1
答案 4 :(得分:0)
基本上,
int val2 = val1++;
具有与以下相同的效果:
int val2 = val1;
val1++;
答案 5 :(得分:0)
val++
增量后操作。
在后递增/递减操作中,首先分配值然后递增/递减。
因此,y = x++
相当于
y = x
x=x+1
在您的情况下,val2
被指定为val1
的旧值,并且val1
会递增,这会将输出视为
Val2 = 4
的 VAL1 = 5 强>
答案 6 :(得分:0)
简单:
int val2 = val1 ++; < ---这个陈述就是这样的
第1步:初始化int val2
第2步:将val1的值分配给val2
第3步:val1的值加1。
答案 7 :(得分: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++
答案 8 :(得分:0)
<meta name="Description" content="Test Description"/>
<meta property="og:title" content="Test og title"/>
是一个Postfix Increment操作,会在变量增加前生成存储在变量中的原始纯值。
您可以查看 Increment/Decrement Operators 以获取更多信息。
在你的情况下:
val++
在递增之前将int val2 = val1++;
的值设置为val1
,这就是val2
和4
中val2
值的原因在5
。
注意:强>
如果您不希望自己的操作影响val1
值,那么您应该这样做:
val1