Integer -> double 拆箱,但 Double -> int 不拆箱。为什么?

问题描述 投票:0回答:1

这个

Integer -> double
转换编译没有错误

double d = Integer.valueOf(1);

这意味着发生以下情况:

  1. Integer
    未装箱
    int
  2. int
    值从int -> double
    经历
    扩大原始转换

Integer
已拆箱。然后扩大未装箱的值。这提供了与
int -> double

相同的行为

创建了假设

Double -> int
也将拆箱,给出与
double -> int

相同的行为

获取代码

int i = Double.valueOf(1);

我希望看到错误消息

从 double 到 int 的有损转换

假设

Double
被拆箱,我们应该观察到与
double -> int

相同的行为

相反,我们收到了输入错误

无法将 Double 转换为 int


此行为背后的解释是什么?

为什么

Integer -> double
之间发生拆箱,而
Double -> int
之间不发生拆箱?

为什么这些是一致的:

  • Integer -> double
  • int -> double

但这些不是:

  • Double -> int
  • double -> int
java data-conversion primitive boxing
1个回答
0
投票

Double
只有两种
valueOf
方法:一种用于
String
输入,另一种用于
double
输入

因此,当您编写

Double.valueOf(1)
时,其中
1
显然是
int
,方法签名意味着您的值
1
int
升级为
double
,然后该方法运行。所以你要求
int = double
而 Java 会说“那不适合,所以:不”。

© www.soinside.com 2019 - 2024. All rights reserved.