Java 值加变量++

Java value plus variable++

考虑以下代码

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++ 添加 1,这导致 val1 为 4.

val2 是 val1 的值,即 4,加上 1 即 5

然而编译器给 val1 的值为 5,给 val2 的值为 4,我在这里不理解或遗漏了什么?

我意识到 val1++ 被第二次使用了,但它被分配给了 val2,应该不会影响 val1s 的值,还是我错了?

因为后缀递增运算符在 val2 赋值后向 val1 加一,如果你想让 val2 也等于 5 你应该使用 :

int val2 = ++val1;

后缀表达式后跟++运算符是后缀递增表达式。 后缀递增表达式的值是变量在存储新值(递增)之前的值。

回顾一下:

Post Increment(val++) :首先执行语句然后将值加一。 Pre Increment (++val) : 先把值加1再执行语句

a++ 称为后缀。

1 添加到 a,return 是旧值。

++a 称为前缀。

1 添加到 a,return 是新值。

所以 int val2 = val1++; 将 return 旧值 (4)

并且仍然将 one 添加到 val1

++ 运算符 a 分两个阶段工作:

  • returns当前值val1
  • 加 1 到 val1

所以在你的场景中,你首先将 1 添加到 val1(但你不打印它) 其次,您分配给 val1 的 val2 值,但在分配它的值运算符之后 ++ 将 1 添加到 val1.

至于您的更新问题:当您将 val1++ 分配给一个变量时,您首先从 val1 复制值,然后将其分配给 val2,然后第三次递增 val1。这就是为什么你有这样的结果。整数和基元都是按值复制的,而不是按引用复制的,因此更改为 val1 不会影响 val2.

为了更好地理解它,请尝试将 val1++ 替换为 ++val1。这样你将首先增加值,然后 return 它,那么你应该有 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++post-自增运算.

在 post-increment/decrement 操作中,首先 赋值,然后 incremented/decremented

所以,y = x++ 等同于
y = x
x=x+1

在您的情况下,val2 被分配了 旧值 val1 并且 val1 递增,输出为
Val2 = 4
Val1=5

很简单:

int val2 = val1++; <--- 这个语句是这样工作的

第一步:int val2初始化

步骤 2: val1 的值赋给 val2

第3步:val1的值加1。

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++ 是一个后缀增量操作,在变量递增之前生成存储在变量中的原始纯值。

您可以查看 Increment/Decrement Operators 了解更多信息。

你的情况:

int val2 = val1++;

会在递增之前将 val1 的值设置为 val2,这就是为什么您在 val2 中得到 4 并且在 [ 中得到 5 的原因=13=].

注:

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

int val2 = val1+1;