我有一个方法,它将对象作为输入,如果输入是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);
这令人困惑.
解决方法:
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,这可以没有错误.
标签:java
来源: https://codeday.me/bug/20190727/1557479.html