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

het*_*lek 5 java compiler-errors

为什么会当试图初始化错误Doubleint,即使使用基本类型时,它不会抛出异常,double

Double a = 1;   // error - incompatible types
Double b = 1.0; // OK
double c = 1;   // OK
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*ain 9

当您初始化Doubleas时:

Double a = 1;
Run Code Online (Sandbox Code Playgroud)

需要做两件事:

  • 拳击intInteger
  • 从扩大IntegerDouble

虽然,拳击很好,但从扩大IntegerDouble无效.因此,它无法编译.

请注意,Java不支持扩展,然后支持Boxing转换,如JLS§5.2中所述:

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

  • 身份转换(§5.1.1)
  • 扩展的原始转换(第5.1.2节)
  • 扩大参考转换(第5.1.5节)
  • 一个拳击转换(§5.1.7),可选地后跟一个加宽的引用转换
  • 一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换.

你的第二个任务是通过拳击转换.
虽然第3 分配通过扩大转换.