1. 程式人生 > >Integer自動拆箱與自動裝箱的注意事項

Integer自動拆箱與自動裝箱的注意事項

java虛擬機器非常的智慧,能自動的幫助我們自動裝箱與拆箱。雖然它自動幫我們處理這些事情很是方便,但是並不是總是這樣的。有時候或許我們就會因為忽略掉這些小細節而給我們的程式留下一些bug。下面我們就來看看兩個小小的測試吧!

例1:

public class TestInteger {
public static void main(String[] args)
{
Integer i = 11;
Integer k = 11;

System.out.println(i==k);
}

}

執行上面的程式,將在控制檯列印true。沒有任何問題。但是我們來看例2.

例2:

public class TestInteger {
public static void main(String[] args)
{
Integer i = 133;
Integer k = 133;

System.out.println(i==k);
}
}

執行例2,將在控制檯列印false。這是為什麼呢?如果你偶然看到這篇部落格,那麼你走運了,因為一般人我不會告訴他。

這是因為java的自動裝箱與拆箱通過上面的方式直接賦值對於Integer只會在128以內才有效,超出這個範圍之後,虛擬機器將不會把建立的物件放到物件池裡。也就是說,超過128之後,通過以上方式直接賦值,將產生兩個不同的物件。所以他們在記憶體中代表的是不同的記憶體地址。

至於濫用自動拆裝箱會產生什麼樣的後果,就等各位在今後的開發應用中慢慢發現了。

相關推薦

Integer自動自動裝箱注意事項

java虛擬機器非常的智慧,能自動的幫助我們自動裝箱與拆箱。雖然它自動幫我們處理這些事情很是方便,但是並不是總是這樣的。有時候或許我們就會因為忽略掉這些小細節而給我們的程式留下一些bug。下面我們就來

Java學習筆記 (十五) 自動自動裝箱

什麼是自動拆裝箱 自動裝箱: 就是將基本資料型別自動轉換成對應的包裝類. 自動拆箱:就是將包裝類自動轉換成對應的基本資料型別。 For example : Integer a=1; //自動裝箱 int b=a; //自動拆

Integer自動自動裝箱的陷阱(整型數-128到127的值比較問題)

Integer的自動拆裝箱的陷阱(整型數-128到127的值比較問題): 1、先看下面的例子: package integerdemo;   publicclass IntegerDemo {       publicstaticvoid main(String[] args) {         

java基本型別和基本型別包裝型比較時的自動自動裝箱

java中,任何物件都繼承自Object,所以都有equals()方法。在基本型別中,兩個數值之間的比較==和equals()方法,比較的都是兩個運算元的地址,地址相同,則返回值為true。在物件中,不管是自己寫的物件還是java中已經有的物件,如果這個類物件複寫了繼承自O

如何理解Java中的自動自動裝箱

小偉剛畢業時面的第一家公司就被面試官給問住了... 如何理解Java中的自動拆箱和自動裝箱? 自動拆箱?自動裝箱?什麼鬼,聽都沒聽過啊,這...這..知識盲區... 回到家後小偉趕緊查資料,我透,這不就是問基本型別跟封裝型別嗎,面試官整啥名詞呢... 別問結果,問就是沒過。 1、 什麼是自動裝箱,自動拆箱 定

java 1.5 自動裝箱注意事項

背景 java1.5後引入了自動裝箱和自動拆箱的概念 自動拆箱:將引用型別轉化為基本資料型別 自動裝箱:將基本資料型別裝為引用型別 但是實際使用中,什麼情況自動拆箱什麼情況自動裝箱呢? 自動裝箱 Integer i = 100; (呼叫Integer.valueOf(100)) 這裡存

Java中自動裝箱自動機制

以下筆記來自於《演算法 (第4版)》。   型別引數必須被例項化為引用型別,因此Java有一種特殊機制來使泛型程式碼能夠處理原始資料型別。 Java中的封裝型別都是原始資料型別所對應的引用型別:Boolean Byte Character Double Float Intege

Java學習筆記09--靜態匯入 ;增強for迴圈 ;可變引數 ;自動裝箱自動;FILE(檔案操作)

∆ 靜態匯入: 靜態匯入的作用: 簡化書寫。 靜態匯入可以作用一個類的所有靜態成員。 靜態匯入的格式: import static 包名.類名.靜態的成員; 靜態匯入要注意的事項:

Java基本型別的自動裝箱自動

一、簡介 java是面入物件程式設計的語言,所有的都表示為物件。那麼對於基本型別,java提供了對應的包裝類。 相應的就有自動裝箱與自動拆箱操作。 二、自動裝箱操作 1、定義 自動裝箱是指基本型別轉為對應的包裝類,如int轉Integer,double轉為Double等。

Java 自動裝箱自動注意的問題

        自動裝箱和自動拆箱不是什麼複雜的技術,自動裝箱就是基本型別(int,long)資料可以先自動轉換為對應的封裝類(Integer,Long)物件,而自動拆箱相反。 在本文中,筆者向大家介紹下Java中一個非常重要也非常有趣的特性,就是自動裝箱與拆箱,並從原

JAVA一切皆對象之包裝類、自動裝箱自動

對象 包裝類 強制 用戶 類型轉換 自動轉換 方法 img 無需 每個基本類型都有一個對應的類;就是所謂的包裝類; 1,裝箱和拆箱 基本類型和類類型可以相互轉換; 基本類型到類類型的轉換叫做裝箱; 類類型到基本類型的轉換叫做拆箱; 2,自動裝箱和拆箱 在類類型

Java語法糖(2):自動裝箱自動

eth 空指針 lang 指針 反編譯 class path load pointer 自動拆箱和自動裝箱 Java為每種基本數據類型都提供了對應的包裝器類型。舉個例子: public class TestMain{public static void main(Strin

java基礎學習總結(十一):自動裝箱自動

自動拆箱和自動裝箱 Java為每種基本資料型別都提供了對應的包裝器型別。舉個例子: public class TestMain { public static void main(String[] args) { Integer i = 10; } }

== equals 自動裝箱 自動

問題描述: 定義了兩個Integer變數,為Integer a= 200;  Integer b= 200; ,  但我比較的時候 if (a == b),卻返回false,不都是200嗎?為什麼返回false,後來改為eq

java的自動裝箱

以下程式執行結果為 public class Test { public static void main(String[] args) { Integer i=null; if(i==0){ System.out

自動裝箱

public class Demo4_JDK5 { /** * * A:JDK5的新特性 * 自動裝箱:把基本型別轉換為包裝類型別 * 自動拆箱:把包裝類型別轉換為基本型別 * B:案例演示 * JDK5的新特性自動裝箱和拆箱 * Integer

JAVA高階特性--自動-裝箱,列舉型別

基本資料型別轉換為引用型別物件 一個自動裝箱的例子 Integer i=10; 相當於 Integer i=new Integer(10);   一個自動拆箱的例子 Integer m=10; int n=m; 相當於n=m.intValue();  

自動裝箱自動(慎用“==”)

先來看一段非常“簡單”的程式碼 public static void main(String[] args) { Integer i1 = 100, i2 = 100, i3 = 130, i4 = 130; System.out.println(i1 == i2); S

Java基本資料型別的大小,他們的封裝類以及自動裝箱

Java提供了一套基本資料型別,總共有八種,也會有人說是有九種。 在我們的印象中,很多人可能會說出byte,short,int,long,float,double,boolean,char這八種資料型別。 那麼還有一種是哪種呢,它到底是不是資料型別呢? 我們很容易忽略一個void,有

11、自動裝箱

什麼是自動拆箱和自動裝箱? //自動裝箱:把基本型別轉換為包裝類型別 Integer s1 = 123; //自動拆箱:把包裝類型別轉換為基本型別 Integer s2 = new Integer(10);