一个java优先级的题目的疑惑?求解答

锵锵cei 发布于 2016/03/06 00:00
阅读 286
收藏 0

请教诸位javaer一个问题

定义三个变量:

int a = 5, b = 10, c = 0;

c = a + b + (a = 15);

请问这里小括号的优先级最前,那么(a = 15),赋值后a的值为何没有影响到变量b左边a的那个值?


加载中
0
Sgmder
Sgmder
5+10+15
锵锵cei
锵锵cei
按照优先级()的优先级高于+,而a赋值成15后,等号右边的第一个a变量没有变化,内存中应该是一个变量啊?整个顺序应该是怎么一种情况?
0
如比如比
如比如比
压栈时第一个a是5,第二个先赋值再压,看看表达式求值方面的资料
0
zhangning_yumedu
zhangning_yumedu
运算由左往右,怎么会影响到第一个a
0
super川
super川
自己撸代码试试
0
猫咪喵喵
猫咪喵喵

这没什么好奇怪的,表达式里的变量的值在表达式开始运算之前就已经定下来了,也就是说:

a + b + (a = 15)

= 5 + 10 + (a = 15)

= 5 + 10 + 15

= 30

妮可以去试试javap反汇编一下,就明白了。

0
随意丶nice
随意丶nice
这样子是在变异的时候已经确定了变以后的代码变成了 c=5 +10+15 了,所以在运行的时候就是30
0
大海
大海
程序从左向右运行,一开始a和b是5和10,他们之和为15,然后a被赋值为15,最后和就是30
返回顶部
顶部