为什么此代码引发此异常:
public class DS3{
public static void main(String[] args) {
double r = (double)((Object)4);
System.out.println(r);
}
}
线程“main”java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double
而这个,运行良好:
public class DS4{
public static void main(String[] args) {
double r = (double)(4);
System.out.println(r);
}
}
两者都是尝试将整数转换为双精度,对吗?
在您的第一个示例中,4
被自动装箱为整数
,然后无法将其转换为原始双精度
。
也许你想要的只是:
double r = 4;
你显示的两个转换,即,
Object x = 4;
double r = (double)x;
和
double r = (double)(4);
需要不同数量的转换:
int
到双
的单转换,Object
拆箱转换,然后是强制转换。Java 强制转换运算符一次只执行一个转换。
要进行第一次转换,您必须将另一个转换添加到整数
,如下所示(演示):
double r = (double)((Integer)((Object)4));
System.out.println(r);
两者都是尝试将整数转换为双精度,对吗?
是的,也不是。
这条线
double r = (double)((Object)4);
导致编译器将4
框在整数
中,并且整数
无法转换为双精度。
此代码段的字节码:
(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
。
我很感激每一个暗示,关于转移目标的文件实现。我已经研究了一些关于浮动精度的论文,但在过去的两周里没有取得太大的进展。 提前感谢!
我试图在我的对话框中添加一个总计,但是我得到了一个错误信息,我似乎不能修复它。如果我试图将总计放入for循环中,它会在对话框中打印5次。我确实需要将总计打印在对话框的最后
我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。 但结果总是错的,我得到的价值如: 预期结果应介于和 我的代码有什么问题! 谢谢
我有一个关于dart中泛型的问题。我有下面的dart代码,带有扩展num的泛型类型参数。在我的类中,我现在想定义一个T类型的值为零的变量。这似乎是不可能的。有人能解释一下为什么会这样吗? 我面临的问题是,我想在我的类中创建一个用零初始化的列表。所以我可以做: 这适用于< code>A 类型'int'不是类型转换中类型'Double'的子类型 令人困惑的是,从Dart 2.1开始,可以将int传递给
问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(
嗨,我最近看到了一个类似这样的问题 在我回答了这个问题后,事实证明我弄错了,我回答了整数。MIN_VALUE但正确的答案是整数。MAX_VALUE。经过进一步的测试,我意识到我对大于整数的int施加的任何双精度。MAX_VALUE只是使int等于整数。MAX_VALUE。例如 经过进一步的测试,我意识到如果你试图将long转换为int,似乎会将int分配给一个看似随机的数字。 所以我的问题是。到底