0

如果我已经null为像这样的对象分配了一个值

Integer t=new Integer(null);

现在如何将此对象更改为 Int 原始数据类型(拆箱)?

4

4 回答 4

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的从未被创造出来。即您问题中的第一个陈述是错误的:如果我已null为 Object赋值。你还没有。

你可能有不同的意思:

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。

于 2013-11-14T08:09:49.660 回答
1

怎么样

Object obj = null; // maybe not null??
Integer t=new Integer(null ? 0 : obj);
于 2013-11-14T08:11:02.510 回答
1

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

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

您问

现在如何将此对象更改为 Int 原始数据类型(拆箱)?

将null Integer 对象拆箱的安全方法,即将这个 Object 更改为 Int原始数据试试这个,

Integer t=new Integer(null);
int a= (int)( t == null ? 0 : t) ;
于 2013-11-14T08:11:14.713 回答
0

Integer t=new Integer(null);抛出 aNumberFormatException因为这个构造函数需要一个非空值String作为输入。

如果您需要Integer从可以是的东西创建一个null,请使用以下代码:

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

拆箱然后总是安全的。

如果你有一个Integer可以为空的,那么你需要使用这个代码:

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

因为在这种情况下自动拆箱将不起作用。

于 2013-11-14T08:14:08.590 回答