当前位置: 首页 > 知识库问答 >
问题:

整型到双精度型

松阳泽
2023-03-14

为什么此代码引发此异常:

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);          
        }   
    }

两者都是尝试将整数转换为双精度,对吗?

共有3个答案

申屠涛
2023-03-14

在您的第一个示例中,4被自动装箱为整数,然后无法将其转换为原始双精度

也许你想要的只是:

double r = 4;
荆城
2023-03-14

你显示的两个转换,即,

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

double r = (double)(4);

需要不同数量的转换:

  • 第二次转换需要从int的单转换,
  • 第一次转换需要从Object拆箱转换,然后是强制转换。

Java 强制转换运算符一次只执行一个转换。

要进行第一次转换,您必须将另一个转换添加到整数,如下所示(演示):

double r = (double)((Integer)((Object)4));
System.out.println(r);
芮叶秋
2023-03-14

两者都是尝试将整数转换为双精度,对吗?

是的,也不是。

这条线

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分配给一个看似随机的数字。 所以我的问题是。到底