Java | Integer强转Double错误

一、问题复现

引发 java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Double 错误的示例代码:

public class ClassCastExceptionExample {
    public static void main(String[] args) {
        Object number = Integer.valueOf(10); // number 是一个 Integer 类型的对象

        Double doubleNumber = (Double) number; // 尝试将 Integer 强制转换为 Double
        System.out.println(doubleNumber);
    }
}

在这段代码中,number 变量最初是一个 Integer 对象(值为 10),但是代码尝试将它强制转换为 Double 类型。

这种转换是不允许的,因此会引发 ClassCastException 异常。

运行这段代码时,将会得到类似以下的错误信息:

Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Double
    at ClassCastExceptionExample.main(ClassCastExceptionExample.java:6)

解决方法是避免不兼容的类型转换,或者在需要时使用适当的类型转换方法。

二、解决方案

1. 直接使用 Double 类型

public class ClassCastExceptionExample {
    public static void main(String[] args) {
        Object number = Double.valueOf(10.0); // 直接创建 Double 类型对象

        Double doubleNumber = (Double) number; // 正确的类型转换
        System.out.println(doubleNumber); // 输出 10.0
    }
}

2. 将 Integer 转换为 Double

public class ClassCastExceptionExample {
    public static void main(String[] args) {
        Object number = Integer.valueOf(10); // number 是一个 Integer 类型的对象

        Double doubleNumber = ((Integer) number).doubleValue(); // 将 Integer 转换为 Double
        System.out.println(doubleNumber); // 输出 10.0
    }
}

3. 类型判断

public class ClassCastExceptionExample {
    public static void main(String[] args) {
        Object number = Integer.valueOf(10); // 作为参数传入的对象

        Double doubleNumber = convertToDouble(number);
        System.out.println(doubleNumber); // 输出 10.0
    }

    public static Double convertToDouble(Object obj) {
        if (obj instanceof Integer) {
            return ((Integer) obj).doubleValue(); // 将 Integer 转换为 Double
        } else if (obj instanceof Double) {
            return (Double) obj; // 直接返回 Double
        } else {
            throw new IllegalArgumentException("Unsupported type: " + obj.getClass().getName());
        }
    }
}

4. 强制转换为double

public class ClassCastExceptionExample {
    public static void main(String[] args) {
        Object number = Integer.valueOf(10); // number 是一个 Integer 类型的对象

        Double doubleNumber = (double) (int) number; // 将 Object 转换为 int或Integer再转double
        System.out.println(doubleNumber); // 输出 10.0
    }
}

Java中关于double、Double相关问题总结
【Java面试题】Double和double 区别

posted @   槑孒  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2022-08-08 Linux之centos配置yum阿里源
2022-08-08 Linux uname 命令
2022-08-08 Linux文件压缩及解压常用命令
2022-08-08 Linux安装geoserver
2022-08-08 Linux 安装Mysql 详细教程
2022-08-08 Linux 链接概念之硬链接与符号链接
2022-08-08 Linux 文件与目录管理
点击右上角即可分享
微信分享提示