== 運算子
== 既可以用于基本資料型別的比較,也可以用于參考資料型別的比較
(1)如果比較的是基本資料型別變數:比較兩個變數的值是否相等,相等即為true
注意:當基本資料型別進行比較時,符號兩邊的資料必須型別兼容(型別相同或可自動型別轉換),否則編譯出錯,
測驗代碼:
public class EqualsTest {
public static void main(String[] args) {
//基本資料型別
int i = 10;
int j = 10;
float f = 10.0f;
System.out.println(i == j);//true
System.out.println(i == f);//true
char c = 10;
System.out.println(i == c);//true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
/*
boolean b = true;
System.out.println(b == i);//型別不兼容,不能進行自動型別轉換,編譯不通過,不能進行比較
*/
}
}
(2))如果比較的是參考資料型別變數:比較兩個物件的地址值是否相同,即兩個參考是否指向同一個物件物體
注意:當參考資料型別進行比較時,符號兩邊的資料型別必須兼容(型別相同或有父子類關系),否則編譯不通過,
代碼示例:
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class EqualsTest {
public static void main(String[] args) {
//參考資料型別比較
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1 == p2);//false
String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1 == str2);//false
/*
Person p = new Person();
String str = "hello";
System.out.println(p == str);//Person和String型別無父子類關系,型別不兼容,不能進行比較
*/
}
}
equals(Object obj) 方法
equals(Object obj)方法只能用于參考資料型別比較,最初是在Object類中定義的:
public boolean equals(Object obj) {
return (this == obj);
}
Object類中定義的equals方法和 == 的作用是相同的:比較兩個物件的地址值是否相同,即兩個參考是否指向同一個物件物體,如果一個型別沒有重寫equals方法,那么呼叫equals等價于 ==,
像String、Date、File、包裝類等都重寫了Object類中的equals()方法,重寫以后,比較的是兩個物件的型別和"物體內容"是否相同,而不考慮參考的是否是同一個物件,
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class EqualsTest {
public static void main(String[] args) {
//參考資料型別比較
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);
System.out.println(p1.equals(p2));//false,Person類沒有重寫equals方法,比較的是物件的地址
String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1.equals(str2));//true,String類重寫了equals方法,比較內容
Date date1 = new Date(4512574565L);
Date date2 = new Date(4512574565L);
System.out.println(date1.equals(date2));//true,Date類重寫了equals方法,比較內容
}
}
自定義類中要根據有沒有重寫Object類的equals方法來判斷;通常情況下,重寫equals方法會比較類中的相應屬性值是否都相同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56942.html
標籤:Java
