摘自:http://hi.baidu.com/list263/item/649a1686e4f1ebebe596e073
例子1:
int a= 1;
a = a++;
System.out.println(a); // 等于1
例子2:
int a=5;
int m=(a++)+(a++);
System.out.println(a + ", " + m); // 等于7, 11
为什么?
解决方案
要详细解答这个问题,可以看《Java语言规范》或者《深入Java虚拟机》。
我来个简单点儿的吧:
int m=(a++)+(a++); | | ① + ② | | └─────┘ | m
由于括号的存在,在这个表达式中,我们需要计算 m = ① + ②
的值。(这个就不解释了,括号的优先级最高)
① 的值:很简单就是
a++
,注意 此时a++
的值是5
,而a
的值是6
。(有疑问吗?)① 的值: 5
a++
的值:5a
的值: 6
② 的值:在第一布中, 我们求得了
a
的值6
,因此, ② 的值就是6
,注意此时a
的值,是7
。(有疑问吗?)② 的值: 6
a++
的值:6a
的值: 7
最后
m
的值,也就是 ① + ② 的值,5+6
=11
。m
的值: 11a
的值: 7