gpt4 book ai didi

java - ClassCastException 整数加倍

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:41 26 4
gpt4 key购买 nike

为什么这段代码会抛出这个异常:

public class DS3{
public static void main(String[] args) {
double r = (double)((Object)4);
System.out.println(r);
}
}

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

还有这个,运行正常:

public class DS4{
public static void main(String[] args) {
double r = (double)(4);
System.out.println(r);
}
}

两者都是尝试将整数转换为 double ,对吧?

最佳答案

Both are a attempt to convert integer to double, right?

是的,也不是。

这一行

double r = (double)((Object)4);

导致编译器将 4 装在 Integer 中,并且 Integer 不能转换为 double。

这段代码的字节码:

(double)((Object) 4)

看起来如下:

// ...
5: iconst_4
6: invokestatic #2 // Method Integer.valueOf
9: checkcast #3 // class java/lang/Double
// ...

(第 6 行导致装箱,第 9 行抛出异常。)

换句话说,它等同于

Object tmp = (Object) 4;  // Auto-boxing to Integer
double d = (double) tmp; // Illegal cast from Integer to double.

另一方面

double r = (double)(4);

4 被视为普通的 int可以 转换为 double

关于java - ClassCastException 整数加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com