首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据原始值检查Null包装器

根据原始值检查Null包装器
EN

Stack Overflow用户
提问于 2012-02-07 22:01:04
回答 5查看 4.9K关注 0票数 3
代码语言:javascript
运行
复制
Integer i = null;
if (i == 3)

为什么上面的第二行抛出一个NullPointerException,IMHO,这只有一个意思,那就是包装器对象i将被取消装箱,这会产生如下的异常:

代码语言:javascript
运行
复制
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(null);
int x = list.get(0);

编辑:你能为我提供一些格式的文档吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-07 22:07:05

它抛出了NPE,因为编译器为你做了以下“魔术”:

代码语言:javascript
运行
复制
Integer i = null;
if (i.intValue() == 3)

显然,当inull时,i.intValue()会抛出NPE。

票数 12
EN

Stack Overflow用户

发布于 2012-02-07 22:08:57

当您尝试将包装的数字与基元数字进行比较时,包装器将自动取消装箱。如果此时包装器为空,则会得到一个NullPointerException。这是自动装箱系统的常见缺陷之一(如果您在循环中装箱/取消装箱数字,则另一个缺陷是性能较差)

票数 3
EN

Stack Overflow用户

发布于 2012-02-07 22:08:15

把包装器类想象成一个holder对象。类似于:

代码语言:javascript
运行
复制
public class Integer {

private int intValue;

//getters and setters

}

如果指向整个对象的指针或引用为null,则无法获取执行任何boxing/unboxing操作的值。

当你说:

代码语言:javascript
运行
复制
if (i == 3)

unboxingnull引用时自动发生,因此出现异常。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9177585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档