如果我已经null
为像这样的对象分配了一个值
Integer t=new Integer(null);
现在如何将此对象更改为 Int 原始数据类型(拆箱)?
我想你会发现这会引发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。
怎么样
Object obj = null; // maybe not null??
Integer t=new Integer(null ? 0 : obj);
此代码不起作用,它会在行抛出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) ;
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() );
因为在这种情况下自动拆箱将不起作用。