为对象分配了一个空值,然后尝试进行拆箱

时间:2013-11-14 08:07:15

标签: java

如果我为

这样的对象分配了null
Integer t=new Integer(null);

如何立即将此Object更改为Int原始数据类型(取消装箱)?

4 个答案:

答案 0 :(得分:7)

我想你会发现这会引发NumberFormatException

public static void main(String[] args) throws Exception {
    final Integer i = new Integer(null);
}

输出:

Exception in thread "main" java.lang.NumberFormatException: null

所以,要回答你的问题,你不能因为Integer从未创建过。即您问题中的第一个语句是false:如果我已为对象分配了null值。你还没有。

你可能意味着不同的东西:

public static void main(String[] args) throws Exception {
    final Integer i = null;
    final int ii = i;
}

这会抛出NullPointerException输出:

Exception in thread "main" java.lang.NullPointerException

由于int不能为null,当取消装箱时(基本上是对i.intValue()的调用)会抛出NPE。

答案 1 :(得分:1)

怎么样

Object obj = null; // maybe not null??
Integer t=new Integer(null ? 0 : obj);

答案 2 :(得分:1)

此代码不起作用,它将在行Integer t=new Integer(null);处抛出 java.lang.NumberFormatException:
例外是,

Exception in thread "main" java.lang.NumberFormatException: null

你问了

  

如何立即将此Object更改为Int原始数据类型(取消装箱)?

unbox null的安全方法整数对象,即将此Object更改为Int 原始数据试试这个,

Integer t=new Integer(null);
int a= (int)( t == null ? 0 : t) ;

答案 3 :(得分:0)

Integer t=new Integer(null);会抛出NumberFormatException,因为此构造函数需要非空String作为输入。

如果您需要从可以Integer的内容创建null,请使用以下代码:

 Integer t = new Integer( null == input ? "0" : input );

然后取消装箱,这总是安全的。

如果您的Integer可以为null,则需要使用以下代码:

int value = ( null == t ? 0 : t.intValue() );

因为在这种情况下自动取消装箱不起作用。