gpt4 book ai didi

java:自动装箱和转换?

转载 作者:行者123 更新时间:2023-12-01 06:38:33 24 4
gpt4 key购买 nike

我对一个小问题感到困惑,请参阅以下内容:

Double j = new Double(5); // No problem.
double j =5;//

//But

//Here the problem:

Double j = 5;
Long k =5;
Float g = 5.0;

我知道解决方案,但我想了解为什么在某些情况下强制转换是隐式完成的,而在其他情况下则不是。

最佳答案

没有什么问题

Double j = new Double(5);

因为 Java 会将 5int 转换为 Double 构造函数将采用的 double。它还会将以下行的 5 转换为 double:

double j =5;

这是一个扩大的原始转换。

这些行有问题。

Double j = 5;
Long k =5;
Float g = 5.0;

Java 不会执行加宽基元转换(55.05L)和装箱转换(double code> 到 DoublelongLong)隐式。它将隐式执行其中之一,但不会同时执行两者。它也不会在此处执行缩小基元转换(5.05.0f)。

JLS, Section 5.2 ,状态:

Assignment contexts allow the use of one of the following:

  • an identity conversion (§5.1.1)

  • a widening primitive conversion (§5.1.2)

  • a widening reference conversion (§5.1.5)

  • a boxing conversion (§5.1.7) optionally followed by a widening reference conversion

  • an unboxing conversion (§5.1.8) optionally followed by a widening primitive conversion.

它没有明确允许最后 3 行尝试执行的操作:先扩大原始转换,然后进行装箱转换。

有趣的是,Java 确实允许:

Number x = 5;  // boxing followed by widening
double y = new Integer(5); // unboxing followed by widening

关于java:自动装箱和转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com