//Integer范圍-128~127 //Integer與Integer比較 Integer a_127 = 127; Integer b_127 = 127; Integer c_new_127 = new Integer(127); //編譯a_127=127時,被翻譯成Integer a_127=Integer.valueOf(127) //而在valueOf()的源碼中,對於-128~127之間的數,會進行緩存,即Integer a_127=127時,會將127進行緩存,下次再寫Integer b_127=127時,則會直接從緩存中取,就不會new了 //所以a_127==b_127結果為true,而a_128==b_128結果為false System.out.println(a_127 == b_127);//true //因為c_new_127新建了一個對象,所以這里兩個對象相比較,當然不一樣 System.out.println(a_127 == c_new_127);//注意:false Integer a_128 = 128; Integer b_128 = 128; System.out.println(a_128 == b_128);//注意:false Integer a_new_128 = new Integer(128); Integer b_new_128 = new Integer(128); //兩個new出來的對象進行比較,一定為false System.out.println(a_new_128 == b_new_128);//注意:false System.out.println(a_128 == a_new_128);//注意:false //int與int比較 int i_127 = 127; int n_127 = 127; System.out.println(i_127 == n_127);//true int i_128 = 128; int n_128 = 128; System.out.println(i_128 == n_128);//true //Integer與int比較 //Integer與int比較時,Integer會自動拆箱為int System.out.println(a_127 == i_127);//true System.out.println(c_new_127 == i_127);//true System.out.println(a_128 == i_128);//注意:true System.out.println(a_new_128 == i_128);//注意:true
Integer.valueOf()的源碼如下:

1 //IntegerCache.low=-128;IntegerCache.high=127 2 public static Integer valueOf(int i) { 3 if (i >= IntegerCache.low && i <= IntegerCache.high) 4 return IntegerCache.cache[i + (-IntegerCache.low)]; 5 return new Integer(i); 6 }
Integer和int的區別:
1.Integer是int的包裝類,int的初值為0,Integer的初值為null。
2.無論值是否相同,Integer與new Integer都不會相等,結果為false。
情況一:Integer范圍在-128~127之間,指向專門存放它的常量池;new Integer引用指向堆。它們的內存地址不一樣,所以無論值是否相同,比較結果都為false。
情況二:Integer范圍不在-128~127之間,編譯時Integer.valueOf()返回的是new Integer();而new Integer引用指向堆。這樣兩者是兩個不同的堆棧對象,無論堆上的值是否相同,引用地址不同,比較結果都為false。
情況三:兩個Integer范圍都不在-128~127之間,則依然是兩個new Integer對象,則比較結果為false。
3.兩個都是非new出來的Integer,如果數在-128~127之間,值相同則為true,否則為false。原因:java在編譯Integer時,會翻譯成Integer i = Integer.valueOf(),而valueOf()會對-128~127之間的數進行緩存。
4.兩個都是new出來的,無論堆上的值是否相同,引用地址不同,結果為false。
5.int和Integer比,無論Integer是new出來的還是-128~127范圍之外的,值相同則為true,否則為false。原因:Integer會自動拆箱為int再比較。
Integer類:
字段:
MAX_VALUE
值為 231-1 的常量,它表示 int
類型能夠表示的最大值。
MIN_VALUE
值為 -231 的常量,它表示 int
類型能夠表示的最小值。
SIZE
用來以二進制補碼形式表示 int 值的比特位數。
TYPE
表示基本類型 int
的 Class
實例。
構造方法:
Integer(int value)
構造一個新分配的 Integer
對象,它表示指定的 int
值。
Integer(String s)
構造一個新分配的 Integer
對象,它表示 String
參數所指示的 int
值。
方法:
bitCount(int i)
返回指定 int 值的二進制補碼表示形式的 1 位的數量。
compareTo(Integer anotherInteger)
在數字上比較兩個 Integer
對象。
doubleValue()
【int,long,float,short】
以 double
類型返回該 Integer
的值。
parseInt(String s)
將字符串參數作為有符號的十進制整數進行解析。
parseInt(String s, int radix)
使用第二個參數指定的基數,將字符串參數解析為有符號的整數。
toBinaryString(int i)
以二進制(基數 2)無符號整數形式返回一個整數參數的字符串表示形式。
toHexString(int i)
以十六進制(基數 16)無符號整數形式返回一個整數參數的字符串表示形式。
toOctalString(int i)
以八進制(基數 8)無符號整數形式返回一個整數參數的字符串表示形式。
valueOf(int i)
返回一個表示指定的 int 值的 Integer 實例。
valueOf(String s)
返回保存指定的 String
的值的 Integer
對象。
valueOf(String s, int radix)
返回一個 Integer
對象,該對象中保存了用第二個參數提供的基數進行解析時從指定的 String
中提取的值。
reverse(int i)
返回通過反轉指定 int 值的二進制補碼表示形式中位的順序而獲得的值。
reverseBytes(int i)
返回通過反轉指定 int 值的二進制補碼表示形式中字節的順序而獲得的值。