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,这可以没有错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |