equal和“==”都是表示相等的意思,但是它們在進行實際的相等判定的時候,卻有著非常大的區別
先看看一個例子
1 public class EqualTest{ 2 public static void main(string[] args){ 3 String str1 = "abcd"; 4 String str2 = "abcd"; 5 String str3 = new String("abcd"); 6 7 System.out.println(str1==str2); 8 System.out.println(str1==str3); 9 System.out.println(str1.equals(str3));10 }11 }
以上代碼中定義了三個字串變數,它們的值都是"abcd",按理來說,它們的結果應該都是true。但是事實上,它們執行得結果是
true
false
true
第二個為false的原因在於str1和str3指向的是不同的對象。
==運用在基礎資料型別 (Elementary Data Type)的時候,通過比較它們的實際值來判定是否相同;但是用於比較參考型別的時候。則是比較兩個引用的地址是否相同,也就是說是否指向同一個對象。通過new string()來建立的字串會單獨產生一個對象,所以str1和str3指向的並不是同一個對象。java的雙引號運算式本身就會建立一個字串對象。
equal()方法是java.lang.Object的方法。也就是說所有的java類都會有這個方法。它可以被覆蓋重寫,通過自訂的方式來判定兩個對象是否相等,其中預設的方式與==相同。但是java.lang.String類並不同,它是不可以被繼承的。它的equal()方法用來比較字串的字串序列是否完全相等。
如:
1 public class Student { 2 private String name; 3 private int age ; 4 5 public Student(String name ,int age){ 6 this.name = name; 7 this.age = age; 8 } 9 public boolean equals(Object object){10 Student student = (Student) object;11 return this.name.equals(student.name)&&this.age==student.age;12 }13 }14 15 public class EqualTest {16 17 public static void main(String[] args) {18 Student stud1 = new Student("liming", 11);19 Student stud2 = new Student("liming", 11);20 System.out.println(stud1.equals(stud2));21 }22 23 }
執行結果為true