无法将java.lang.Long强制转换为java.lang.Double
我有一个将对象作为输入的方法,如果输入是instanceOF Long,则将值转换为double值。下面是代码:
public static void main(String[] args) { Long longInstance = new Long(15);
Object value = longInstance;
convertDouble(value);
}
static double convertDouble(Object longValue){
double valueTwo = (double)longValue;
System.out.println(valueTwo);
return valueTwo;
}
但是当我执行上面的代码时,我得到下面的异常:
Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Doubleat com.datatypes.LongTest.convertDouble(LongTest.java:12)
at com.datatypes.LongTest.main(LongTest.java:8)
请让我知道为什么它给了我例外。
但是,如果直接尝试将Long对象转换为double,则不会发生classCast异常。
Long longInstance = new Long(15); double valueOne = (double)longInstance;
System.out.println(valueOne);
这很混乱。
回答:
在JLS中找到了解释,请
下的https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.5
Long l = new Long(15); Object o = l;
将Object Type转换为Primitive时,它将 。
double d1=(double)o;
在上面的语句中,我们尝试将 ,但是由于 因此根据
定义的缩小转换规则,在运行时它将抛出
将Long Type转换为double时,它将 。
double d2 =(double)l;
它将首先通过调用longvalue()方法将Long值拆箱,然后从long扩展为double,这可能没有错误。
以上是 无法将java.lang.Long强制转换为java.lang.Double 的全部内容, 来源链接: utcz.com/qa/431995.html