post-increment 和 pre-increment 操作在 java 中的规则
Rules for post-increment and pre-increment operations in java
哦,我在这个例子中遗漏了一些东西...
int a=1;
int b=1;
int c=1;
System.out.println(a+++b---c++);
是不是和下一个一样?
System.out.println( (a++) + (b--) - (c++) );
好像结果是0,但肯定是错误的,这是怎么回事?
我得到 1
(这正是我所期望的,1 + 1 - 1
是 1
)。使用 eclipse 压头(并在操作后添加 a
b
和 c
的输出)
int a = 1;
int b = 1;
int c = 1;
System.out.println(a++ + b-- - c++);
System.out.printf("a=%d b=%d c=%d%n", a, b, c);
明白了
1
a=2 b=0 c=2
而且,原因是post增量直到下一条语句才生效。而预增量(例如,++a
)立即生效。
通过使用调试器,我观察所有变量以跟随表达式
a=b=c=1
一个。 a++ + b-- - c++
= 1 + 1- 1 =0
A 之后 => a=2 b=0 c=2
乙。 (a++) + (b--) - (c++)
= 2 + 0 - 2
B之后=> a=3 b=-1 c=3
当我们在不同的class中执行这些表达式时,a++ + b-- - c++
和(a++) + (b--) - (c++)
之间没有区别,相同的输入有相同的结果。
哦,我在这个例子中遗漏了一些东西...
int a=1;
int b=1;
int c=1;
System.out.println(a+++b---c++);
是不是和下一个一样?
System.out.println( (a++) + (b--) - (c++) );
好像结果是0,但肯定是错误的,这是怎么回事?
我得到 1
(这正是我所期望的,1 + 1 - 1
是 1
)。使用 eclipse 压头(并在操作后添加 a
b
和 c
的输出)
int a = 1;
int b = 1;
int c = 1;
System.out.println(a++ + b-- - c++);
System.out.printf("a=%d b=%d c=%d%n", a, b, c);
明白了
1
a=2 b=0 c=2
而且,原因是post增量直到下一条语句才生效。而预增量(例如,++a
)立即生效。
通过使用调试器,我观察所有变量以跟随表达式
a=b=c=1
一个。 a++ + b-- - c++
= 1 + 1- 1 =0
A 之后 => a=2 b=0 c=2
乙。 (a++) + (b--) - (c++)
= 2 + 0 - 2
B之后=> a=3 b=-1 c=3
当我们在不同的class中执行这些表达式时,a++ + b-- - c++
和(a++) + (b--) - (c++)
之间没有区别,相同的输入有相同的结果。