天天看點

Integer是int的封裝類,是以在比較相等時一般使用equals,但是如果值在[-128,127]之間會在class

Integer是int的封裝類,是以在比較相等時一般使用equals,但是如果值在[-128,127]之間會在class常量池中存在,也就是說會放在IntegerCache中,在比較相等時需要注意一下。

有以下幾種情況:

Integer a=100

Integer b= 100

那麼a==b結果是true,a.equals(b)結果也是true

這裡之是以a==b結果為true是因為常量池區間内的資料用的是同一個引用。

Integer a=new Integer(100);

Integer b=new Integer(100);

那麼a==b結果是false,a.equals(b)結果是true

這裡之是以a==b結果為false因為new 出來的對象不在常量池中,不是同一個引用

Integer a=100

Integer b=new Integer(100);

那麼a==b結果是false,a.equals(b)結果是true

這裡之是以a==b結果為false因為new 出來的對象不在常量池中,不是同一個引用

int a=150

Integer b =150

那麼a==b結果是true,a.equals(b)結果是true

這裡a==b為true是因為b進行了拆箱Integer.intValue操作,把Integer轉化成了int,屬于基本類型比較,封裝類型和基本類型比較都會自動拆箱

Integer a =150

Integer b =150

Integer c=new Integer(150);

那麼a==b或者a==c結果都為false,a.equals(b)結果是true

這裡==比較都為false一方面說明了超出了常量池範圍,另一面說明Integer比較是不會拆箱的

總結如下:

兩個new 出來的Integer用==比較結果是false;

常量池中非new的兩個Integer 用==比較結果為true;

new出來的Integer和int用==比較結果都會為true,因為會對Integer對象進行拆箱。

看似簡單的Integer實際上卻存在諸多問題,但是大家隻要都用equals比較無論如何都不會出問題的,這也是大家都用equals的原因了。

剛剛也提到了拆箱,那你知道如何裝箱嗎?

Integer是int的封裝類,是以在比較相等時一般使用equals,但是如果值在[-128,127]之間會在class
Integer是int的封裝類,是以在比較相等時一般使用equals,但是如果值在[-128,127]之間會在class
Integer是int的封裝類,是以在比較相等時一般使用equals,但是如果值在[-128,127]之間會在class

繼續閱讀