加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.lang.Long无法强制转换为java.lang.Double

发布时间:2020-12-15 04:29:55 所属栏目:Java 来源:网络整理
导读:我有一个方法,它将对象作为输入,如果输入是instanceOF Long,然后将值转换为double值.以下是代码: public static void main(String[] args) { Long longInstance = new Long(15); Object value = longInstance; convertDouble(value);}static double convert
我有一个方法,它将对象作为输入,如果输入是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中找到解释
见表5.1.将转换转换为基本类型

Long l = new Long(15);
    Object o = l;

将对象类型转换为基元时,它将缩小然后取消装箱.

double d1=(double)o;

在上面的语句中,我们试图将Object缩小为Double,但由于实际值为Long,因此在运行时它会抛出ClassCastException,因为缩小了5.1.6中定义的转换规则.缩小参考转换

将Long Type转换为double时,它将进行拆箱然后加宽.

double d2 =(double)l;

它将首先通过调用longvalue()方法取消装入Long值,然后从long扩展到double,这可以没有错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读