使用’cast’方法将Integer转换为int时的Autoboxing / Unboxing
这是一个非常简单的情况:我试图将Object类型转换为这样的原语:
Object object = Integer.valueOf(1234); int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int int result2 = (int)object; //works fine
这是类’Class’的cast方法的源代码
public T cast(Object obj) { if (obj != null && !isInstance(obj)) throw new ClassCastException(cannotCastMsg(obj)); return (T) obj; } private String cannotCastMsg(Object obj) { return "Cannot cast " + obj.getClass().getName() + " to " + getName(); }
为什么会这样? 其他原语也是如此。
实例
由于Java中的generics,因为它无法返回实际原始类型的值,所以对于原语来说,强制转换不能很好地工作…所以无论如何它最终会再次装箱。 如果你没有直接赋予int
值,那么它也必须装箱。
所以基本上,如果你想转换为int
,只需直接转换。
isInstance
始终为基元返回false
:
如果此
Class
对象表示基本类型,则此方法返回false
。
…… cast
也应该是。