繁体   English   中英

为什么我不能将 Double object 设置为等于 int? - Java

[英]Why can't I set a Double object equal to an int? - Java

为什么在尝试将Double初始化为int时会出现错误,即使在使用原始类型double时它不会引发异常?

Double a = 1;   // error - incompatible types
Double b = 1.0; // OK
double c = 1;   // OK

为什么 class Double和原始类型double之间的行为不同?

当您将Double初始化为:

Double a = 1;

需要做两件事:

  • 拳击intInteger
  • Integer扩大到Double

虽然,拳击很好,但从Integer扩大到Double是无效的。 因此,它无法编译。

请注意,Java 不支持加宽装箱转换,如JLS §5.2 中所述:

赋值上下文允许使用以下之一:

  • 身份转换(§5.1.1)
  • 扩大的原始转换(§5.1.2)
  • 扩大参考转换(§5.1.5)
  • 一个装箱转换(第 5.1.7 节)可选地后跟一个扩大的参考转换
  • 一个拆箱转换(第 5.1.8 节)可选地后跟一个扩大的原始转换。

你的第二个任务是通过拳击转换
第三次分配经历了扩大转换

这是因为 Java 的自动装箱会将 1 转换为 Integer 而不是 Double。

Double a = Double.valueOf(1); 

应该管用

因为自动拳击

 Double a = 1;     equals to Double a = Integer.valueOf(1);

 Double b = 1.0;   equals to Double b = Double.valueOf(1);    

 double c = 1;     equals to double c = (double) 1;

您还可以做的是用D标记您的号码。

 Double d = 1D; equals to Double d = Double.valueOf(1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM