Java 使用'将整数强制转换为int时自动装箱/取消装箱;铸造';方法
下面是一个非常简单的例子:我试图将对象类型强制转换为如下基本体:Java 使用'将整数强制转换为int时自动装箱/取消装箱;铸造';方法,java,casting,autoboxing,Java,Casting,Autoboxing,下面是一个非常简单的例子:我试图将对象类型强制转换为如下基本体: 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
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();
}
为什么会这样?其他原语也是如此
cast
不能很好地用于原语,因为它不能返回实际原语类型的值,这是由于Java中的泛型。。。所以不管怎样,它最终还是会再次拳击。如果您没有直接赋值给int
值,那么出于这个原因也必须将其装箱
因此,基本上,如果您想转换为int
,只需直接强制转换即可
isInstance
对于原语总是返回false
:
如果此类
对象表示基元类型,则此方法返回false
cast
可能也应该如此。好吧,isInstance
的文档指定:“如果这个类对象代表一个基元类型,这个方法返回false。”所以这并不奇怪,但是cast
文档应该说它对于基元类型总是失败的。所以我不应该对基元使用cast方法,而应该直接使用(int)?@AnmolGupta:是的,基本上。