首页 > 编程语言 >Java | Integer强转Double错误

Java | Integer强转Double错误

时间:2024-08-08 22:21:07浏览次数:9  
标签:强转 Java Double number class doubleNumber Integer public

一、问题复现

引发 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 区别

标签:强转,Java,Double,number,class,doubleNumber,Integer,public
From: https://www.cnblogs.com/echohye/p/18349838

相关文章

  • java中——接口
    接口的作用只能用来调用如果十个人里有三个会游泳,就可以新建一个接口储存swim方法,三人可以通过继承关系调用而抽象是在方法的基础上重写,体现出同一个方法的不同形态如果十个人游泳,但是游泳的姿势不同,如狗刨。。。此时就可以通过抽象继承关系去重写子类的游泳姿势接口的定义和......
  • Java项目:213基于Springboot + vue实现的网上订餐系统(含论文+开题报告+开题PPT)
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍基于Springboot+vue实现的网上订餐系统前台登录:1.首页:菜品信息推荐、菜品信息展示、查看更多2.菜品信息:菜品分类、菜品名称查询、菜品详情、下单提交3.个人中心:可......
  • 【Java】代码规范
    参考《码出高效:Java开发手册》~是一个读书笔记~目录命名规范包名类名变量常量代码编写规范命名规范所有的命名都需要能看出代码的作用,使用英文单词进行命名包名使用小写字母,相邻的点之间只能有一个单词,使用单数形式例:importjava.util.stream.*;如果类名有复数......
  • JAVA+SQL办公自动化系统(毕设+实现+源码+数据库)
    摘  要极光办公自动化系统是针对南开创元信息技术有限公司开发的,专门用于企业内部员工信息交流的软件,其开发过程主要包括前端应用程序的开发和后端数据库的建立两个方面。对于前者要求应用程序功能完备操作简单,对于后者要求建立起数据一致性、完整性和安全性好的数据库......
  • Java 怎么获取支付宝Open ID
    在Java中获取支付宝用户的OpenID,通常是通过支付宝的开放平台API来完成的。OpenID是支付宝用于唯一标识一个支付宝用户的字符串,它在OAuth授权流程中被用来获取用户的身份和权限。下面我将给出一个基于Java使用SpringBoot框架和支付宝开放平台SDK来获取用户OpenID的详细步骤和示例......
  • Java后端面试题(redis相关1)(day7)
    目录为什么要用Redis?Redis到底是多线程还是单线程?Redis数据持久化机制RDB方式AOF方式Redis是单线程,但为什么快?Redis过期删除策略Redis内存淘汰策略为什么要用Redis?基于内存操作,内存读写速度快支持多种数据类型,包括String、Hash、List、Set、ZSet等支持持久化,Redi......
  • Java设计模式和AOP编程
    Java六大设计原则;Java23种设计模式(在此介绍三种设计模式)Java设计模式单例模式应用场景:spring中bean的作用域用的就是单例模式//基本的单例模式————懒汉式publicclassstudent{//3.创建static修饰的成员变量privatestaticstudentstu;//1.设计私......
  • Java方法06:递归
    A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自己不调用自己。否则,就是个死循环!递归算法重点:递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方......
  • Java方法03:方法的重载
    上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:publicstaticdoublemax(doublenum1,doublenum2){ if(num1>num2){ returnnum1; }else{ returnnum2; }}......
  • Java方法04:拓展命令行传参
    有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。命令行参数是在执行程序时候紧跟在程序名字后面的信息。【下面的程序打印所有的命令行参数】publicclassCommandLine{ publicstaticvoidmain(Stringargs[]){ for(inti=0;i<arg......