Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java值加变量++;_Java_Operators_Increment - Fatal编程技术网

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;