Java Integer和String的比較操作

2021-07-16 13:40:39 字數 1299 閱讀 3955

一、實驗

先看一組實驗,會有不少驚奇的發現:

// [-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...