【发布时间】:2011-12-28 01:45:35
【问题描述】:
http://leepoint.net/notes-java/data/expressions/precedence.html 的一个例子
下面的表达式
1 + 2 - 3 * 4 / 5
被评估为
1 + 2 - 3 * 4 / 5
= (1 + 2) - ((3 * 4) / 5)
= 3 - (12/5)
= 3 - 2 The result of the integer division, 12/5, is 2 .
= 1
然后我看到http://www.roseindia.net/java/master-java/operator-precedence.shtml的另一个例子
下面的表达式
4 + 5 * 6 / 3
被评估为
4 + (5 * (6 / 3))
当涉及 * 和 / 时,我对如何决定首先评估哪个感到有些困惑。在上面的示例中,两者似乎有所不同。
第一个示例将3*5/5 评估为((3*4)/5)
而第二个例子是评估5*6/3 as (5*(6/3))
我知道 * 和 / 优先于 + 和 - 但是当表达式同时包含 * 和 / 时呢?还有为什么上面两个例子显示了不同的方法?其中一个是错的吗?
编辑
public class ZiggyTest {
public static void main(String[] args) {
System.out.println(4 + (5 * (6 / 3)));
System.out.println(4 + ((5 * 6) / 3));
System.out.println(1 + 2 - (3 * (4 / 5)));
System.out.println(1 + 2 - ((3 * 4) / 5));
}
}
上面的程序产生输出
14
14
3
1
如果第一个产生相同的输出,为什么最后两个输出不一样。
【问题讨论】:
-
我怀疑
4 + 5 * 6 / 3被评估为4 + (5 * (6 / 3))它只是在正确评估时给出相同的结果 (4 + ( ( 5 * 6 ) / 3 ))。