怎么可能提供整数预期双倍的整数?

时间:2017-10-04 12:01:26

标签: java

我有这个片段:

class scratch_5{
  public static void main(String theory[]){
    Item i = new Item();
    Integer a = 3;
    i.setNum(a);
    System.out.println(i.getNum());
  }

}

class Item{
   double num;

   public void setNum(double num){this.num=num;}
   public double getNum(){return num;}
}

你能告诉我这是怎么回事吗?我知道双包装类是Double,而Integer和Double都是从Number派生的,因此它们不可能互换使用

1 个答案:

答案 0 :(得分:5)

它会进行编译,因为Integer已取消装箱到int,然后安全地扩展为double

根据Section 5.1.2 of the JLS: Widening primitive conversions

  

对原始类型的19个特定转换称为扩展原语转换:
  ...
  intlongfloatdouble   ...
  尽管在某些转换中可能会出现精度损失,但扩展的原始转换从不会导致运行时异常

不能做的事情正好相反:

class Item {
    public void setNum(Double num) {...}
}

int a = 3;
i.setNum(a);   // compile error

Java不会扩展 autobox。