java - 为什么这样不会短路呢?

标签 java

public static void main(String args[]){
    String s = null;

    if(false && false || s.equalsIgnoreCase("x")) {    //throws an exception
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}

我本来以为会遇到假短路,但事实并非如此。 这是为什么?我认为如果你有一个错误,则无需继续下一个&&。 请帮助我理解。

最佳答案

&& operator has higher precedence than the || operator 。所以,条件相当于

if( (false && false) || s.equalsIgnoreCase("x")) {    //throws an exception

然后评估离开:

if(false || s.equalsIgnoreCase("x")) {    //throws an exception

不会短路。要使其短路,请使用括号:

if(false && (false || s.equalsIgnoreCase("x"))) {    // fine

关于java - 为什么这样不会短路呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175835/

相关文章:

java - 同时从多个线程调用 shell 脚本

java - 延迟初始化注入(inject)的 bean 依赖项(Spring 3)

java - 为什么 JDBC 连接需要在 finally block 中关闭?

java - 何时创建自定义类加载器?

java - Java 中的 boolean 表达式求值

java - 转换输出文件不存在

Java - 在 Linux 上运行程序时换行选项没有按预期工作

java - 自动分析 Eclipse 插件依赖关系

java - java中如何获取泛型类的类型?

java - xmx 和 MaxRAM JVM 参数有什么区别?