1. 程式人生 > >Java中整型數值==和equals的處理

Java中整型數值==和equals的處理

前言

equals 比較內容, == 比較地址。

PS.

equals在Object類中,作用和==完全是一樣的,都是對物件地址的比較,不是比較值。

在String類中,equals被重寫成了字串的具體值的比較,而不再是地址比較。

 

==:

1)基本型別之間互相比較:值進行比較。

比如:

         return 5==6;

返回false

PS.

         byte n1 = 5;

         short n2 = 129;

         return n1 == n2;

返回false,n1會隱式轉為short,低階向高階是隱式型別轉換,高階向低階必須強制型別轉換,byte<short<int<long<float<double

2)一邊是基本型別,一邊是包裝型別:

同類型的進行比較,如Integer 與int,Long與long進行==比較時,會自動拆箱。

比如:

         int a = 220;

         Integer b = 220;

        System.out.println(a==b);//true

不同型別之間進行比較,如果有一方為非包裝類,則會自動拆箱,且會進行自動向上轉型。

比如:

         int a = 220;

         Short b = 220;

        System.out.println(a==b);//true

3)兩邊都是包裝型別:

如果兩邊是同類型的包裝類,比較地址。

如果兩個都是new出來的物件,直接為false,如果是常量賦值,會引用存在的快取物件,關於包裝型別的;如果兩快取機制,請自行了解;

如果為不同包裝類,則不會拆箱,且不能比較,編譯會報錯。

 

equals():

先比較型別,再比較值

equals可以用來比較字串以及引用型別是否相等;但無法比較值型別,如整形int,double

1)基本型別之間互相比較:無法比較。

2)一邊是基本型別,一邊是包裝型別:

同類型的進行比較,如Integer 與int,Long與long進行比較時,先會進行自動裝箱,基本型轉換為其封裝型別

不同型別之間無法進行比較。

3)兩邊都是包裝型別:

如果是同類型包裝類的話,直接比較值;

如果是不同型別包裝類,不會進行拆裝箱,不能比較,編譯會報錯。