Java值加变量++;
考虑以下代码Java值加变量++;,java,operators,increment,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行,1通过val1++的方式被添加,这导致val1为4 Val2是val1的值,因此为4,加上1即5 然而,编译器给了val1一个5的值,给了val2一个4的值,我在这里不理解或
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行,1通过val1++的方式被添加,这导致val1为4
Val2是val1的值,因此为4,加上1即5
然而,编译器给了val1一个5的值,给了val2一个4的值,我在这里不理解或遗漏了什么
我意识到val1++第二次被使用,但它被分配给val2,不应该影响val1s值,或者我错了吗?因为后缀增量运算符在分配给
val2
之后将一个值添加到val1
,如果您希望val2
也等于5,您应该使用:
int val2 = ++val1;
后缀表达式后跟++运算符是后缀增量表达式后缀增量表达式的值是存储新值(递增)之前的变量值。
重述:
Post Increment(val++
):首先执行语句,然后将值增加1。
增量前(
++val
):首先将值增加一,然后执行语句。a++
称为后缀
将1
添加到a
,返回旧值
++a
称为前缀
将1
添加到a
,返回新值
所以intval2=val1++代码>将返回旧值(4)
并且仍然将一个添加到val1++
运算符A分两个阶段工作:
- 返回
val1的当前值
- 将1添加到
val1
因此,在您的场景中,首先将1添加到val1(但不打印它)
其次,将val1的值赋值给val2
,但赋值后,运算符++将1添加到val1
至于您的更新问题:当您将val1++
赋值给一个变量时,首先从val1复制值,然后将其赋值给val2
,然后再递增val1。这就是为什么你会有这样的结果。整数和原语是按值复制的,而不是按引用复制的,因此更改为val1
不会影响val2
为了更好地理解它,请尝试将val1++
替换为++val1
。通过这种方式,您将首先递增值,然后返回它,然后您应该有val1==val2==5
您可以通过
val1++
或者使用
++val1
第一个选项首先执行分配,然后递增val1。长版本:
val2 = val1;
val1 = val1 + 1;
第二个选项首先执行增量,然后将新值分配给val2。这种行为的长版本:
val1 = val1 + 1;
val2 = val1;
基本上
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++ val++
是一种后缀递增操作,它在变量递增之前生成存储在变量中的原始纯值。
您可以查看了解更多信息
就你而言:
int val2 = val1++;
在递增之前,将val1
的值设置为val2
,这就是为什么在val1
中将4
作为val2
和5
中的值
注意:
如果您不希望您的操作影响val1
值,您应该这样做:
int val2 = val1+1;
如果你有一个比现在更好的答案,请将其作为答案发布。
int val2 = val1+1;