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;
考虑以下代码
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;