标签:java nullpointerexception conditional-operator autoboxing
让我们看看以下代码段中的简单Java代码:
public class Main {
private int temp() {
return true ? null : 0;
// No compiler error - the compiler allows a return value of null
// in a method signature that returns an int.
}
private int same() {
if (true) {
return null;
// The same is not possible with if,
// and causes a compile-time error - incompatible types.
} else {
return 0;
}
}
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.temp());
System.out.println(m.same());
}
}
在这个最简单的Java代码中,即使函数的返回类型是int,temp()方法也不会发出编译错误,我们试图返回值null(通过语句返回true?null:0;).编译时,这显然会导致运行时异常NullPointerException.
但是,如果我们使用if语句(如在same()方法中)表示三元运算符,则会出现同样的错误,这会发出编译时错误!为什么?
解决方法:
编译器将null解释为对Integer的空引用,对条件运算符应用自动装箱/取消装箱规则(如Java Language Specification, 15.25中所述),并快乐地进行操作.这将在运行时生成NullPointerException,您可以通过尝试来确认它.
标签:java,nullpointerexception,conditional-operator,autoboxing 来源: https://codeday.me/bug/20190911/1804637.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。