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
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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 文件与目录管理