Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8中的三元运算符,用Maven编译_Java_Maven_Nullpointerexception_Compiler Errors_Primitive Types - Fatal编程技术网

Java 8中的三元运算符,用Maven编译

Java 8中的三元运算符,用Maven编译,java,maven,nullpointerexception,compiler-errors,primitive-types,Java,Maven,Nullpointerexception,Compiler Errors,Primitive Types,以这一类为例: package be.duo.test; public class Main { public static void main(String[] args) { Main main = new Main(); main.execute(); } private void execute() { for(int i = 0; i < 10; i++) { System.ou

以这一类为例:

package be.duo.test;

public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        main.execute();
    }

    private void execute() {
        for(int i = 0; i < 10; i++) {
            System.out.println("" + method());
        }
    }

    private int method() {
        return (Math.random() > 0.5d) ? 1 : null;
    }

}

有人能给我解释一下为什么它的行为不同吗?

我不确定你用的是哪个Java 8次要版本,但我可以在Java 1.8下编译

C:\Users\XXXX>javac -version
javac 1.8.0_31

C:\Users\XXXX>javac Main.java

C:\Users\XXXX>java Main
Exception in thread "main" java.lang.NullPointerException
        at Main.method(Main.java:15)
        at Main.execute(Main.java:10)
        at Main.main(Main.java:5)

据我所知,它在Java8下应该是合法的

见:

lub(整数,null)
应该是
Integer
。基本上,如果您有一个形式为
boolean?int:null
的条件,则表达式的结果应该是
Integer
,并将其取消装箱。(我想你已经知道会发生什么。)

因此,根据规范,它应该是相同的


看起来像是一个编译器错误。我想说的是,已经发现了很多这样的代码,请尝试更新到最新版本。

使用MavenIt完成的编译使用javac 1.8.0对我来说很好。它不是一个“short if”符号。这是三元运算符,它不能代替if。无论这些代码在不同的Java版本中(无论是在编译时还是在运行时)的行为是否不同,我都不会让这些代码滑入代码库。
int
类型化方法究竟为什么要返回
null
?@jeroenvanevel该方法不返回
整数
对象。看看返回类型。
C:\Users\XXXX>javac -version
javac 1.8.0_31

C:\Users\XXXX>javac Main.java

C:\Users\XXXX>java Main
Exception in thread "main" java.lang.NullPointerException
        at Main.method(Main.java:15)
        at Main.execute(Main.java:10)
        at Main.main(Main.java:5)
3rd → null
2nd ↓        
int   lub(Integer,null)