代码之家  ›  专栏  ›  技术社区  ›  Federico Cristina

条件表达式缺少Java错误?

  •  3
  • Federico Cristina  · 技术社区  · 15 年前

    用方法 test1() test2() 类型不匹配错误:无法从null转换为int ,这是正确的;但为什么我的方法不一样呢 test3() ? 在这种情况下,Java如何以不同的方式计算条件表达式(显然,一个 NullPointerException

    public class Test {
    
        public int test1(int param) {
            return null;
        }
    
        public int test2(int param) {
            if (param > 0)
                return param;
            return null;
        }
    
        public int test3(int param) {
            return (param > 0 ? param : null);
        }
    
    }
    

    提前谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   polygenelubricants    15 年前

    在混合运算符类型时,条件运算符相当棘手;这是许多人的话题 Java Puzzlers .

    下面是一个典型的例子:

    System.out.println(true ? Integer.valueOf(1) : Double.valueOf(2));
    // prints "1.0"!!!
    

    还有一个:

    System.out.println(true ? '*' : 0);     // prints "*"
    int zero = 0;
    System.out.println(true ? '*' : zero);  // prints "42"
    

    而且,正如你刚刚发现的:

    System.out.println(true  ? 1 : null);   // prints "1"
    System.out.println(false ? 1 : null);   // prints "null"
    

    理解条件运算符的所有复杂性 ?: 可能很难。最好的建议是不要在第二个和第三个操作数中混用类型。

    Java拼图,拼图8:Dos Equis :

    JLS参考

        2
  •  2
  •   Community CDub    8 年前

    看到答案了吗 this 问题。基本上,编译器将尝试自动取消空值的装箱(并抛出空指针异常)。我想这就是您遇到的语法问题:

    public int test3(int param) { 
        return (param > 0 ? param : null); 
    }