2010-07-20 84 views
6

當不使用對構造函數的調用而初始化java.lang.Double對象而是使用基元時發生了什麼?它似乎工作,但我不知道爲什麼。編譯器是否存在某種隱式轉換?這是使用的Java 5.使用原始雙精度值初始化Double對象

public class Foo { 

    public static void main(String[] args) { 
     Double d = 5.1; 

     System.out.println(d.toString()); 

    } 

} 
+1

現在知道它被稱爲自動裝箱,你可以在這裏找到很多[有趣的文章](http://stackoverflow.com/search?q= [java] +自動裝箱):) – 2010-07-20 14:03:34

+0

Autboxing,這就是我正在尋找對於。謝謝! – 2010-07-20 14:54:51

回答

9

這被稱爲Autoboxing其是在Java 5中加入它將原始類型和包裝類型之間自動轉換的特徵如double(原始)和java.lang.Double(該對象包裝)。 Java編譯器自動將線:

Double d = 5.1; 

成:

Double d = Double.valueOf(5.1); 
5

它被稱爲AutoBoxing

自動裝箱和 基本類型 原始類型之間的轉換,例如自動開箱int,boolean, 及其等價物基於對象的 類似Integer a nd布爾型, 可能需要額外的編碼,特別是如果 轉換僅用於方法 調用Collections API, 示例。

自動裝盒和自動拆箱 Java原語生成的代碼更簡潔,更易於操作。在 下一個示例int是 存儲,然後從 ArrayList檢索。 5.0版本將 轉換爲整數並轉換回編譯器所需的 。

以前

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, new Integer(42)); 
    int total = (list.get(0)).intValue(); 

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, 42); 
    int total = list.get(0);