在JAVA JDK1.5以后具有的自動裝箱與拆箱的功能,所謂的自動裝箱 與拆箱也就是把基本的數據類型自動的轉為封裝類型。 如:自動裝箱,它可以直接把基本類型賦值給封裝類型 Integer num = 10 ; Double d = 2d ; 自動拆箱,它可以把封裝類型賦值給基本類型 int num = new Integer(10); double d = new Double(2d);
知道了自動裝箱與拆箱后我們現看一下下面這兩個程序代碼:
大家看看這兩個程序代碼的結果是怎么樣的呢? 其實在AutoBoxDemo1.java中結果是:d1==d2 在AutoBoxDemo2.java中結果是:d1!=d2
為什么結果會是這樣的?我們來看了解一下!
其實剛剛這兩個程序結果的不同是與==運算符比較有關,==是用來比較 兩個基本數據類型的變量是否相等的,而事實上==也用于判斷兩個對象 變量名是否參考同一對象。在自動裝箱時對于值從-128到127之間的值 它們被裝箱為Integer對象后會在內存中重用,所以在AutoBoxDemo1.java 中是相等的,而超過了從-128到127之前的值時,被裝箱后的Integer對象 并不會被重用。所以AutoBoxDemo2.java中是不相等的。
posted on 2007-12-12 09:58 一鳴 閱讀(1806) 評論(2) 編輯 收藏 所屬分類: J2SE
這跟自動裝箱關系不大,實質上 Integer d1 = 200 ; 調用的是 Integer d1 = Integer.valueOf(200) ; 因為緩存中有 -128~127 所以其中的數字用 Integer.valueOf() Long.valueOf() 等會反回同一個對象,也因為 Integer/Long等是不變式的,所以可以這么用 總之不應歸咎到自動裝拆箱的誤,首先要檢討的是你有 d1==d2 的形式進行比較的意途是什么,顯然去比較它們的引用基本沒什么意思,既然是比較數值就用 d1.equals(d2) 或者 d1.intValue()==d2.intValue() 來比較,也是編程習慣要注意的問題。 回復 更多評論
@隔葉黃鶯 謝謝您的指正,很久沒有寫記錄的習慣了,在此謝謝你的指正,我也一定更加努力。 回復 更多評論
Powered by: BlogJava Copyright © 一鳴