一、實驗
先看一組實驗,會有不少驚奇的發現:
// [-128,127]範圍的 自動裝箱(box),同值是同乙個物件
integer a =
1;integer b =
1;system.out.println("i1:"
+ (a == b)); // true
// 不在[-128,127]範圍裝箱的integer,值相同也不是同乙個物件
a =128;
b =128;
system.out.println("i2:"
+ (a == b)); // false
// 使用new乙個物件的方法
a =new
integer(1);
b =new
integer(1);
system.out.println("i3:"
+ (a == b)); // false
system.out.println("i4:"
+ (a.
equals(b))); // true
system.out.println("i5:"
+ (a.
equals(1))); // true
system.out.println("i6:"
+ (a ==
1)); // true, integer和int用==比較,integer自動拆箱unbox,轉換為普通int間的比較
/** * string的比較,==是引用比較,比較字串是否相同用equals
*/string str1 =
"haha";
string str2 =
"haha";
system.out.println("s1:"
+ (str1 == str2)); // true
str1 =
newstring("haha");
str2 =
newstring("haha");
system.out.println("s2:"
+ (str1 == str2)); // false
system.out.println("s3:"
+ (str1.
equals(str2))); // true
二、啟示
在程式中,如果有大量的值為[-128, 127]的integer,可以使用box而不是new乙個物件 來節省記憶體。
字串的比較操作,一定要用equals而不是==,不少初級開發者常常容易犯這個錯誤
Java Integer裝箱和拆箱
裝箱 把基本型別用它們相應的引用型別包裝起來,使其具有物件的性質。int包裝成integer float包裝成float。拆箱 和裝箱相反,將引用型別的物件簡化成值型別的資料。integer a 100 這是自動裝箱 編譯器呼叫的是static integer valueof int i int b...
java Integer快取機制
示例 public static void main string args 輸出 a b true c d true e f false u i false j k true分析 為了節省記憶體,提高效能,當取值區間在 128 127 時,變數a和b會共用乙個物件,即直接將a的記憶體位址賦給b 如...
Java Integer的相關蹊蹺
參考 integer的裝箱和拆箱 integer a 1 integer b 2 integer c 3 integer d 3 integer e 321 integer f 321 long g 3l long h 2l system.out.println c d system.out.pri...