【发布时间】:2018-08-15 16:08:46
【问题描述】:
我无法理解后增量和前增量运算符中的运算符优先级。我做了我的研究,并在 StackOverFlow 中找到了以下文章
Precedence of ++ and -- operators in Java
但它没有回答我的问题。
在下面的代码中
d = 1; System.out.println(++d * d++);
根据@Paŭlo Ebermann 的回答之一,上述表达式被评估为 ++d * d++ => (++d) * (d++) 然后从左到右进行评估,给出的答案为 2*2=4,这当然是 java 在我打印它时所说的。
我的理解是我相信表达式被评估为 ++d * d++ => (++d * (d++)) 因为 d++ 的优先级高于 ++d 给出的答案为3*1=3。
编辑:支持我的主张的另一个例子- 考虑表达式 2+3*5 ,它被评估为 (2+(3*5)) 并且评估以这种方式发生(乘法后加法)。但是考虑这个表达式 int i=1;sysout(i+i++);这里 i+i++ 必须变为 (i+(i++))。后增量必须将 i 增加 2(类似于乘法)分配给 i,这使得 2+1=3 但输出为 2。
请澄清我在此与评估顺序的优先级有关的问题
【问题讨论】:
标签: java operators operator-keyword operator-precedence