由于第一部分的计算结果为false,此代码是否不会评估if语句的零部分?如果是这样,所有Java IDE中的所有情况都适用?或者某些编译器会抛出异常?这个if语句会引发异常还是忽略它?
int n = 0;
int x = 5;
if (n != 0 && x/n > 100) {
System.out.println(" s1");
} else {
System.out.println("s2");
}
由于第一部分的计算结果为false,此代码是否不会评估if语句的零部分?如果是这样,所有Java IDE中的所有情况都适用?或者某些编译器会抛出异常?这个if语句会引发异常还是忽略它?
int n = 0;
int x = 5;
if (n != 0 && x/n > 100) {
System.out.println(" s1");
} else {
System.out.println("s2");
}
假设我们包括SoP的进口,并放入系统行内的静态主写的,不会有异常抛出,并s2
将被打印。 X/0
将永远不会在您的代码中进行评估,因为& &首先检查左表达式,因此它永远不会抛出任何东西。
我不同意。如果'int n'被声明为字段而不是本地参数,并且这部分代码由多个线程执行,并且其中一个线程将'n'赋值为'0',则可能抛出异常。 –
“IF”。确切地说,我只是基于我给出的代码的答案。在任何Java环境中,代码行都不会抛出异常。假设当然给出了SoP的输入。我不记得我在谈论多线程 – Mekap
我们不能确定这一点。否则,代码将被发布到方法中。我们可以承担任何事情,所以这个职位也可以封闭太宽。 –
的条件和操作& &就像&(§15.22.2),但评估其右边的操作数只有在其左侧操作数的值是true。
所以不,你不会得到一个例外。
很明显,这假定你有一个单线程或线程安全的环境 - 如果你将可见性问题引入混合,那么这是任何人的猜测。
所有(正确的)Java编译器和JVM都会以同样的方式运行。至于它会做什么...为什么不试一试,亲自看看? – yshavit
Java为布尔运算使用[short circuit evaluation](http://en.wikipedia.org/wiki/Short-circuit_evaluation)。只评估所需的数量。这是由[JLS 15.23](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.23)授权的**。 –
糟糕,关闭这个错误的原因。让我试着找到一个更好的... – yshavit