使用'cast'方法将Integer转换为int时的Autoboxing/Unboxing

Anm*_*pta 2 java autoboxing casting

这是一个非常简单的例子:我试图将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
Run Code Online (Sandbox Code Playgroud)

这是类'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();
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?其他原语也是如此.

实例

Jon*_*eet 7

cast由于Java中的泛型,因为它不能返回实际原始类型的值,因此它不能真正适用于原语:所以无论如何它最终会再次装箱.如果你没有直接指定一个int值,那么它也必须装箱.

所以基本上,如果你想转换成int,只需直接投射.

isInstance记录总是返回false原语:

如果此Class对象表示基本类型,则此方法返回false.

...... cast也许应该也是.