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

Autoboxing/Unboxing while casting Integer to int using 'cast' method

这是一个非常简单的案例:我正在尝试将 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'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();
}

为什么会这样?其他原语也发生了同样的情况。

Live Example

cast 不能很好地用于基元,因为它不能 return 实际基元类型的值,由于 Java 中的泛型...所以无论如何它最终都会再次拳击。如果您不直接分配给 int 值,则也必须出于这个原因将其装箱。

所以基本上,如果你想转换为int,直接转换即可。

isInstancedocumented 总是 return false 对于原语:

If this Class object represents a primitive type, this method returns false.

...cast 应该也是。