巧記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之間 ),