当前位置: 首页 > 面试题库 >

无法将java.lang.Long强制转换为java.lang.Double

邵劲
2023-03-14
问题内容

我有一个将对象作为输入的方法,如果输入是instanceOF Long,则将值转换为double值。下面是代码:

public static void main(String[] args) {
    Long longInstance = new Long(15);
    Object value = longInstance;
    convertDouble(value);
}

static double convertDouble(Object longValue){
    double valueTwo = (double)longValue;
    System.out.println(valueTwo);
    return valueTwo;
}

但是当我执行上面的代码时,我得到下面的异常:

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at com.datatypes.LongTest.convertDouble(LongTest.java:12)
at com.datatypes.LongTest.main(LongTest.java:8)

请让我知道为什么它给了我例外。

但是,如果直接尝试将Long对象转换为double,则不会发生classCast异常。

Long longInstance = new Long(15);
    double valueOne = (double)longInstance;
    System.out.println(valueOne);

这很混乱。


问题答案:

在JLS中找到了解释,请
参见表5.1
下的https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.5


将转换转换为原始类型


    Long l = new Long(15);
    Object o = l;

将Object Type转换为Primitive时,它将 变窄,然后再拆箱

    double d1=(double)o;

在上面的语句中,我们尝试将 Object缩小为Double ,但是由于 实际值是Long, 因此根据 5.1.6中
定义的缩小转换规则,在运行时它将抛出 ClassCastException 。 缩小参考转换

将Long Type转换为double时,它将 取消装箱,然后扩大

    double d2 =(double)l;

它将首先通过调用longvalue()方法将Long值拆箱,然后从long扩展为double,这可能没有错误。



 类似资料:
  • 问题内容: 我想使用本机sql返回行数。但是控制台说我。怎么了?这是我的方法: 问题答案: 使用方法,而不是将其强制转换为: 好像返回。一种选择是强制转换为: 但是不要这样做。而是使用Nambari在评论中提供的方式。我不是Hibernate的用户,因此无法提供特定于Hibernate的解决方案。

  • 问题内容: 即使我强制转换为int,但是也会发生此异常… 实际上我的Hibernate-JPA方法返回了,然后将其转换为… 这是我的Hibernate代码: 现在,我将其转换为: 我要转换为。 问题答案: 采用: 代替。 该方法在class中定义,该类进行了扩展。

  • 问题内容: 我有。我想使用获得最大结果。这是我的代码: 这是我的: 现在我得到了。怎么了? 问题答案: 您的错误可能在以下行中: 其中query.list()返回BigInteger列表而不是Long列表。尝试将其更改为。

  • 问题内容: 我有MainActivity类,该类具有实例化ApplicationBar的方法,所有其他Activity都从此继承,因此他们可以使用此方法。 但是我也有一个MapHolder类,它必须从xml中扩展,因为它使用来显示地图。问题是如果我从不显示ApplicationBar选项卡扩展它,并且从MainActivity扩展它而不显示地图,则出现此错误: 问题答案: 您正在尝试将a强制转换为

  • 问题内容: 我收到以下异常。 造成原因: java.lang.ClassCastException:无法将java.math.BigInteger强制转换为java.lang.Integer 用下面的代码 在这条线 有人知道吗? 问题答案: 您可以使用: 或者也许覆盖了和价值观。

  • 问题内容: 我长期困扰这个问题。我有一段时间搜索此问题,但没有解决方案。 结构体: 我也用我 在我的。 请提供有关如何解决此问题的一些信息。 问题答案: 从中删除注释并使其: 发生您的问题是因为的特化,这意味着Spring将尝试创建注入实例。由于superclass()不是通用的,因此您无法将其向下转换为,因此这行代码将失败(与尝试使用手动实例化该代码的方式相同): 专业课仍应使用注释。当spri