这两个程序有啥区别啊

img


帮看下这两个程序有什么区别怎么计算啊第二行的程序有什么区别呢我看两个程序答案不一样啊为啥

因为第一个a++后的值会赋值给后面的a,第二个不会因为a++在最后。看看字节码反编译文件
有用记得采纳

img

这题考察了前加加。
示例2:

(3 * a++) + a  的意思是
(3 * a++) 等同于3*2=6,但是后面还得+a,就得算++,6+1=7,7+2=9

示例3:

a+(3 * a++)  的意思是
(3 * a++) 等同于3*2=6,但是后面再没有表达式,不算++了,2+6=8

求值顺序导致的问题。
a 假设虚拟机从左向右进行求值:
1式:(3 * 2) + 3 = 9
2式:2 + (3 * 2) = 8

b 假设虚拟机自右向左求值时:
1式:(3 * 2) + 2 = 8
2式:3 + (3 * 2) = 9

一般求值顺序会根据操作符的结合性,操作符的优先级来确定其在语法书中的求值顺序。对于同优先级的二元操作符一般并不规定求值顺序。
不清楚java标准是否有规定求值顺序。若未规定的话,那在不同java环境实现中运行有可能会有a或b两种不同的结果

a++的顺序不一样。