无法将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.Double

at 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

回到顶部