Java值加变量++

时间:2015-05-06 06:44:55

标签: java operators increment

考虑以下代码

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值,或者我错了吗?

9 个答案:

答案 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
  • 的当前值
  • 将{1添加到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,这就是val24val2值的原因在5

注意:

如果您不希望自己的操作影响val1值,那么您应该这样做:

val1