【发布时间】:2018-08-22 15:27:31
【问题描述】:
我在一个 Java 编程测验问题中发现了这一点。
public class Calculator {
public static void main(String[] args) {
int i = 0;
Calculator c = new Calculator();
System.out.print(i++ + c.opearation(i));
System.out.print(i);
}
public int operation(int i) {
System.out.print(i++);
return i;
}
}
在 sn-p 上面执行会给我121 的结果。我期待它是111。我将解释我是如何解释它的。
+ 加法运算符将从右到左执行(参考:operator precedence)。因此,首先调用c.operation(0) 并打印值1 而我希望该值是0,因为System.out.print 首先打印i 的值,然后增加i 值,因为它是后自增运算符。
其次,i 值 1 被返回到 main 并且语句 System.out.print(i++ + 1) 现在被执行。由于i 具有后增量运算符,它应该像0 + 1 一样执行并产生结果1 将其打印结果为2。
第三,i 的值现在增加到 1,并且按预期打印。
简而言之,我希望将值打印为011,但我得到的结果为121。我不确定我的解释哪里出错了。
【问题讨论】:
-
你把
+的优先级弄错了。查看第 11 层的链接文档(加法运算符,not 一元+):它声明它们是“从左到右”执行的,即 first @ 987654343@ 和 then operation(i)` 现在将得到 1。 -
你是对的@Thomas。感谢您指出!
标签: java operators increment operator-precedence