java 自动拆箱_Java 自动装箱 和 自动拆箱
自動裝箱:/**
*?實際上,程序運行時,系統為我們執行了下面一條語句:
*?Integer?number?=?new?Integer(290);
*/
Integer?number?=?290;
System.out.println(number);
自動拆箱:Integer?number?=?290;
//?Other?code
/**
*?實際上,程序運行時,系統為我們執行了下面一條語句:
*?int?number2?=?number.intValue();
*/
int?number2?=?number;
System.out.println(number2);
就上面示例代碼塊而言,實際上自動裝箱就是系統自動幫我們去 new 了 Integer 對象,大家都知道,每個對象都會有一個 hashCode() 方法,這個方法是繼承 Object 而來,Object 類是所有類的超類。當需要比較兩個對象是否相等時,可以用 "==" 和 equals 來做比較。
于對象而言, "==" 比較的是哈希碼的值,也就是比較 hashCode() 方法的返回值,這個值是唯一的,在底層它是用來確定對象在堆內存上的存儲位置。"==" 也可以用來做基本數據類型的比較。equals 方法大家都知道,它是用來比較兩個對象的內容是否一樣。
上面說到自動裝箱其實就是系統自動幫我們去 new 了 Integer 對象,但是神奇的事情發生了:
當 int 的取值在 -128 ~ 127 之間的時候,這時候系統并不會每次都幫我們去 new 一個 Integer 對象,而是取值相同的對象只會被 new 一次,取值相同的 Integer 對象系統不會再去 new 一次,而是共享了已有的這個 Integer 對象。
而當 int 的取值在 -128 ~ 127 之外的時候,這時候不管 Integer 對象的取值是否一樣,系統都會去 new 一個。//?-128~127?之內的數
Integer?number1?=?40;
Integer?number2?=?40;
System.out.println("number1?==?number2?:?"?+?(number1?==?number2));
//?-128~127?之外的數
Integer?number3?=?128;
Integer?number4?=?128;
System.out.println("number3?==?number4?:?"?+?(number3?==?number4));
System.out.println("number3?equals?number4?:?"?+?(number3.equals(number4)));
示例代碼輸出結果:number1?==?number2?:?true
number3?==?number4?:?false
number3?equals?number4?:?true
short 與 int 的裝箱規則是一樣,就不多說了,但不要認為所有的基本數據類型都有這樣一個規則,比如 float 和 double 都沒有這樣的規則,float 和 double 每次裝箱的時候都是會包裝成一個對象的。
轉載請并標注: “本文轉載自 linkedkeeper.com ”???著作權歸作者所有
總結
以上是生活随笔為你收集整理的java 自动拆箱_Java 自动装箱 和 自动拆箱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对字符串数组进行排序、依据字
- 下一篇: java例7_在Java 7中处理周数