使用’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也应该是。