此代码是否不会评估if语句的除零部分,因为第一部分的计算结果为false?如果是这样,对于所有Java IDE中的所有情况都是如此吗?或者某些编译器会抛出异常吗?
int n = 0;
int x = 5;
if (n != 0 && x / n > 100) {
System.out.println(" s1");
} else {
System.out.println("s2");
}
答案 0 :(得分:1)
来自JLS §15.23:
条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。
所以不,你不会得到例外。
显然,这假设你有一个单线程或线程安全的环境 - 如果你在混合中引入了可见性问题,那么这是任何人的猜测。
答案 1 :(得分:0)
假设我们包含了SoP的导入,并且这些行被写入静态main中,则不会抛出任何异常,并且将打印s2
。
永远不会在您的代码中评估X/0
,因为&&首先检查左表达式,因此,它永远不会抛出任何东西。