Java 为什么这会导致ClassCastException?
它在运行时向我显示异常:Java 为什么这会导致ClassCastException?,java,Java,它在运行时向我显示异常: public class Test8 { public static void main (String args[]) { Number numberRef = new Integer(0); Double doubleRef = (Double)numberRef; } } 线程“main”java.lang.ClassCastException中的异常: 无法将java.lang.Integer转换为java.lang.Dou
public class Test8 {
public static void main (String args[]) {
Number numberRef = new Integer(0);
Double doubleRef = (Double)numberRef;
}
}
线程“main”java.lang.ClassCastException中的异常:
无法将java.lang.Integer转换为java.lang.Double
为什么会这样?您试图将
Integer
的实例强制转换为引用Double
,这是不可能发生的Integer
和Double
是两个不同的类,每个类的对象不能简单地相互转换
Number
是Integer
和Double
的常见super
类,因此Double
或Integer
的实例可以是Number
。换句话说,整数
数字
,双精度
数字但是,整数
双精度
Exception in thread "main" java.lang.ClassCastException:
java.lang.Integer cannot be cast to java.lang.Double
您收到的
ClassCastException
符合以下条件:
下面是检查对象的运行时类型R
是否与类型T
兼容的算法,该类型是在cast运算符中命名的类型的擦除()。如果抛出运行时异常,则它是一个ClassCastException
如果R
是普通类(不是数组类):
- 如果
是类类型,则T
必须是与R
相同的类(),或者是T
的子类,否则会引发运行时异常。T
那怎么办
Integer i = new Integer(0);
Double d = new Double(1);
Number ni = i;
Number di = d;
Integer id = d; //invalid;
Double dd = i; //invalid
相反
是类的一个方法。
numberRef.doubleValue()
将返回整数的双精度值,然后可以将该值分配给双精度值
文件-
因为
Integer
不是Double
的子类?是的,不能将Integer
强制转换为Double
。下面的arshajii给出了正确的答案,使用doubleValue()
。还值得一提的是整数和int、Double和Double是不同的东西。一些初学者倾向于认为强制转换是某种转换,但事实并非如此。Casting只是告诉编译器“不,你认为这个对象可能不是这个类的实例,但我可以向你保证它会是,所以无论如何都要编译它”。不用说,当对象在运行时不是您所说的类的实例时,就会引发运行时异常。
Double doubleRef = numberRef.doubleValue();