一、==的使用
==為運算子,可以用在基本資料型別(除了boolean型別)和參考資料型別變數當中**
基本資料型別包括數值型(整數型別(byte,short,int,long)浮點型別(float,double)),字符型(char)和布爾型(boolean)
(1)基本資料型別變數的比較:
public class 測驗類 {
public static void main(String[] args) {
int i=1;
int j=1;
System.out.println(i==j);//true
float k=1.0f;
System.out.println(i==k);//true
double l=1.0;
System.out.println(i==l);//true
System.out.println(k==l);//true
boolean a=true;
// System.out.println(i==a);//和boolean型別無法進行比較
char b=1;
System.out.println(i==b);//true
char c=97;
char c1='a';
System.out.println(c==c1);//true
}
}
代碼運行結果如圖所示:

(2)參考資料型別的比較:
參考資料型別包括類(class),介面(interface)和陣列([ ]),
public class 測驗類1 {
public static void main(String[] args) {
Person p1=new Person("小瑩",18);//實體化物件,創建記憶體
Person p2=new Person("小瑩",18);
System.out.println(p1==p2);//false,二者地址值不同
String str1=new String("小賈");
String str2=new String("小賈");
System.out.println(str1==str2);//false,與上面類似
}
}
class Person{
String name;
int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Person(){
}
代碼運行結果如圖所示:

得出結論:
(1)基本資料型別變數的比較,比較的是變數保存的資料是否相等,而并不一定要求型別相同,
(2)參考資料型別變數的比較,比較的是兩個物件的地址值是否相等,比較的是兩個變數是否來自同一個物件物體,
二、equals()的使用
equals()為一種方法,而非運算子,只能適用于參考資料型別,
public class 測驗類1 {
public static void main(String[] args) {
Person p1=new Person("小瑩",18);
Person p2=new Person("小瑩",18);
System.out.println(p1.equals(p2));//false
/*p1.equals()的方法體
public boolean equals(Object obj) { 觀察發現這里的equals()方法和"=="是一樣的,比較的是二者的地址值是否相等,
return (this == obj);
}
*/
String str1=new String("小賈");
String str2=new String("小賈");
System.out.println(str1.equals(str2));//true
/*str1.equals()的方法體
public boolean equals(Object anObject) {
if (this == anObject) { 如果地址值相等那么肯定資料相等
return true;
}
if (anObject instanceof String) { 如果anObject是String的一個實體則 instanceof 運算子回傳 true,如果 anObject 不是指定類的一個實體,或者 anObject 是 null,則回傳 false,
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {如果兩個物件的物體內容相同,那么他們的長度一定相等
char v1[] = value; 將二者放入陣列中逐個比較大小
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) { 逐個比較兩個陣列的元素值
if (v1[i] != v2[i])
return false;
i++;
}
return true; 如果兩個陣列完全一樣回傳true
}
}
return false;
}
*/
}
}
class Person{
String name;
int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public Person(){
**加粗樣式** }
}
代碼運行結果如圖所示:

得出結論:
(1)Object類中的equals()方法的作用和"=="是相同的,比較的是兩個物件的地址值是否相同,
(2)String,Date,File等都重寫了Object中的equals()方法,重寫后比較的是兩個物件的內容是否一致,
三、總結
(1)雙=既可以比較基本資料型別也可以比較參考資料型別變數,其中基本資料型別變數間的比較比較的是數值,對于參考資料型別變數間比較的是記憶體地址,
(2)equals()方法若沒被重寫默認和雙=一樣,String,Date,File,包裝類等的equals()方法是被重寫過的,作用為比較的數值大小,建議對于呼叫不熟悉的equals()時先轉到定義看一下作用,
新手上路,因能力有限,若有不足之處還望大家海涵!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266787.html
標籤:java
