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

时间:2014-02-25 15:35:18

标签: java compiler-errors

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

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

为什么类Double和基本类型double之间的行为不同?

3 个答案:

答案 0 :(得分:9)

Double初始化为:

Double a = 1;

需要做两件事:

  • 拳击intInteger
  • Integer扩展到Double

虽然拳击很好,但从IntegerDouble的扩展无效。所以,它无法编译。

请注意,Java不支持扩展,后跟 Boxing 转换,如JLS §5.2:

中所述
  

分配上下文允许使用以下之一:

     
      
  • 身份转换(第5.1.1节)
  •   
  • 扩大原始转换(第5.1.2节)
  •   
  • 扩大参考转换(第5.1.5节)
  •   
  • 拳击转换(§5.1.7),可选地后跟加宽   参考转换
  •   
  • 取消装箱转换(第5.1.8节),可选地后跟加宽   原始转换。
  •   

你的2 nd 分配通过拳击转换 虽然3 rd 分配通过扩展转换

答案 1 :(得分:0)

这是因为Java的自动装箱会将1转换为整数而不是双倍。

Double a = Double.valueOf(1); 

应该有效

答案 2 :(得分:0)

因为自动拳击

 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);