1. 程式人生 > >巧記Integer int 自動裝箱與拆箱

巧記Integer int 自動裝箱與拆箱

神總結:

    
/* 1 總結 integer  integer.valueof 一種情況可以使用 == equals
 *   
 *      new 出來的東西只能不能喝 integer integer.valueof進行==
 *   
 *   
 *   Byte  Integer Short Long Character 5
*  發現其包裝類均佔一個位元組 -128--127之間
*  只有滿足這個條件才可以使用常量池:
*  
*  Integer.valueOf如果傳進來是一個 -128--127之間的返回
*   integerCache類中一個靜態的陣列中的一個物件。 否則返回新的integer

*  Integer a=127  相當於Integer.valueof()
*  Integer 68  最終會返回 68-(-128)

* 2 神奇的原始碼:

*    public static Integer valueOf(int i) {
               assert IntegerCache.high >= 127;
            if (i >= IntegerCache.low && i <= IntegerCache.high)
              return IntegerCache.cache[i + (-IntegerCache.low)];
               return new Integer(i);
    }

*/ 

 int in=127;

Integer in1=127; 
Integer in2=Integer.valueOf(127);
Integer in3=new Integer(127);
 
System.out.println("由於自動裝箱  和自動拆箱 int其他三種情況 全相等 出現6個true");
System.out.println(in==in1);
System.out.println(in==in2);
System.out.println(in==in3);
System.out.println("");
System.out.println(in1.equals(in));
System.out.println(in2.equals(in));
System.out.println(in3.equals(in));
System.out.println("");
System.out.println("integer 和valueof的是實質是一種情況");
System.out.println("");
System.out.println(in1==in2);
System.out.println(in1.equals(in2));
System.out.println("");
System.out.println("new  和 integer integer.valueof進行比較");
System.out.println("");
System.out.println(in3==in1);
System.out.println(in3==in2);
 
System.out.println("當超出範圍的是 integer integerof==會指向不同物件   return new Integer(i);");
Integer i=180;
Integer ii=Integer.valueOf(180);

System.out.println(i==ii);

測試結果:

第二次測試 驗證結果:
由於自動裝箱  和自動拆箱 int其他三種情況 全相等 出現6個true
true
true
true


true
true
true


integer 和valueof的是實質是一種情況


true
true


new  和 integer integer.valueof進行比較


false
false
當超出範圍的是 integer integerof==會指向不同物件   return new Integer(i);
false

               十分不好意思,答案你們自己一個個對吧 。可以先看好上面的關係不看答案 自己做一遍。巧記  equals比較的時候都是相等的。值得注意的是int基本型別沒有這個方法

  容易被騙 ,根據原始碼我們值得思考 Integer  Integer.valueof就是一回事情(範圍是-128~127之間  ),