[英]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;
需要做两件事:
int
到Integer
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.