可能重复:
post increment operator java
What is x after “x = x++”?
有人能解释一下以下每个小程序的结果吗? :
public static void main(String[] args) {
int a = 10;
a = a++;
System.out.println(a);
}
结果是:10
为什么不是11因为a应该在作业后增加?这是因为它涉及到opeartor左右不同的变量=?
下一个:
public static void main(String[] args) {
int a = 10;
a = ++a;
System.out.println(a);
}
结果是:11
易于理解,但编译器会出现警告:“对变量a的赋值无效”。但结果却不同意。
更新
我不会修改我原来的问题,但我添加了这条评论以澄清现在我抓住了警告的含义。也就是说,即使没有赋值(通过简单的语句++ a),结果也是相同的(11)。
答案 0 :(得分:11)
a++
的值为a
。 ++
的优先级高于=
。所以:
a
的值。a
会增加。a
。因此a
的值不会改变。
你可以弄清楚第二种情况会发生什么。
答案 1 :(得分:1)
在第一种情况下,首先发生分配,然后增加。所以你获得了增量之前的价值。但在第二种情况下,它先增加,然后分配。
答案 2 :(得分:1)
让我们分析以各种方式产生的字节代码 -
int a = 10;
a = a++;
System.out.println(a); //Output - 10
制作了ByteCode -
0 bipush
2 istore_1
3 iload_1
4 iinc
7 istore_1
8 getstatic
11 iload_1
12 invokevirtual
15 return
和
int a = 10;
a = ++a;
System.out.println(a); //Output -11
此处编译器发出警告 - 对变量a的赋值无效
制作ByteCode -
0 bipush
2 istore_1
3 iinc
6 iload_1
7 istore_1
8 getstatic
11 iload_1
12 invokevirtual
15 return
在这里我们可以看到第一种情况下变量首先加载然后递增,因此它不会对variable a
产生任何影响。
在第二种情况下,它首先递增,然后加载变量,使其达到增量效果。
答案 3 :(得分:0)
这是因为++更像是一个方法,而不是一个真实的数字。
你可以将它们分成两个单独的行。
第一个是
a = a;
return a + 1;
第二个是
a = a+1;
答案 4 :(得分:0)
a++
表示增加变量a
的值,但a++
具有原始值!
a = ??
表示将a
的值设置为??
所以你正在做的是将a的值递增1,然后将其设置为旧值。
++a
表示增加变量a
的值,但是++a
具有新的值!
所以在第二个例子中,你是递增a的值,然后将a的值设置为该值(它刚刚得到),所以你做两次相同的操作。
答案 5 :(得分:0)
a++
等同于a = a + 1
,但在表达式中使用该值后增加(此处赋值)++a
相同但在表达式中使用之前递增。 a = ++a;
没有明确的分配影响,因为它等于a = a = a + 1
答案 6 :(得分:-2)
当您编写a++
时,意味着在处理'='运算符后将增加。所以
b = a++;
System.out.println(a);
System.out.println(b);
应该在你的屏幕上产生:11,10。因为a
在b取'a'的值后变为11。如果您将a++
更改为++a
,则会在处理'='之前强制执行增量,因此您将给出b = a + 1,并且在屏幕上您应该有11,11。