2016-07-31 25 views
1

Java初學者在這裏。我在我的書中,我們談論ArrayLists和我的書的部分只是給了我一個ArrayList的酷例如用Strings瞭解ArrayLists中的自動裝箱(Big Java Section 7.3)

現在讓我吃驚的是居然說

由於號碼不Java中的對象,你不能直接將它們插入到數組列表中。例如,你不能形成一個ArrayList<double>.

相反,我們需要使用所有八種基元類型的包裝類。這是我的書給出了一些我覺得很奇怪的小例子,讓我們看看下面的例子。

這是將我們的d放入對象中的自動裝箱。我想我們可以把它看作Double d = new Double(29.95);

Double d = 29.95 

我們可以拆箱它做double x = d;, 所以現在x只是一個值,對不對?

現在我的困惑依賴的繼承人。 我注意到,我們可以做一些算術表達式我們Double對象 說d = d+1

我的書上說

這裏d是自動拆箱成一個雙

我們把它加1

然後將結果自動裝箱成新的雙

在d

我的問題

存儲到新創建的包裝對象的引用最後一部分是我無法理解的東西。這是什麼意思?我記得在第四章中我們知道,當我們設置兩個彼此相等的對象時,當我們改變一個時,另一個也會改變(我相信這叫做by reference

另一方面,爲什麼要做算術反正這樣呢?如果我們必須解除框然後,這看起來超級超級低效率。我會說首先使用一個正常的數組

回答

1

d = d + 1其中dDouble實質上意味着d = Double.valueOf(d.doubleValue() + 1);,這是一個新的值分配給結果。隱含地添加Double.valueOfd.doubleValue基本上是自動裝箱的意思(它可能是new Double而不是Double.valueOf,但含義仍然相同)。

同樣double x = d表示double x = d.doubleValue()

作爲一個很好的做法,我建議將自動裝箱改爲使用例如顯式類型轉換。.doubleValue()Double.valueOf。任何IDE都將幫助您檢測這些內容,並通過明確定義轉換,一些錯誤(通常是NPE)可能會變得更加明顯。

+0

我明白了。當我們說Double d = 29.95時,d是一個對象嗎?沒有價值?相反,雙D = 29.95這是一個值? –

+0

嗯,它是一個持有雙重價值的對象 –

+0

這有什麼真正的好處嗎?我的意思是,當我們將數據設置爲數字時,我們通常希望以某種方式操縱它們。如果我們使它成爲一個具有雙重值的對象,我們需要做這個轉換。 –