如果我为
这样的对象分配了null
值
Integer t=new Integer(null);
如何立即将此Object更改为Int原始数据类型(取消装箱)?
答案 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() );
因为在这种情况下自动取消装箱不起作用。