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)