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 Incrementval++ ):首先执行语句然后将值增加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;