java中的equals與==
阿新 • • 發佈:2018-02-01
bsp 源碼 內部 brush ++ class object類 功能 length equals()與==都是java中用於進行比較的,返回boolean值,不同的是equals()是Object類中定義的一個方法,==
是一個比較運算符。下面是equals()在Object中的源碼:
public boolean equals(Object obj) { return (this == obj); }
我們驚奇的發現這方法和==不是一模一樣嗎??下面再來看看String類中equals()方法的源碼:
public boolean equals(Object anObject) { //先進行地址值的判斷,如果想等直接返回true if (this == anObject) { return true; } //如果地址不相等,判斷傳進來的對象是不是String類型的一個實例 if (anObject instanceof String) { //發現是string類型的實例,將它強轉為string類型(強轉之後就可以調用string的方法了) String anotherString = (String) anObject; //value是string內部的一個char數組,每個string對象都對應一個char數組,得到長度 int n = value.length; //先進行長度的比較,如果相同才能進行下一步 if (n == anotherString.value.length) { //發現長度相同,將string對應的char數組中的字符一個一個進行比較 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
顯然String對equals()方法進行了重寫,使得它具有比較String內容是否相等的功能,此時的equals()就不在是僅僅比較對象地址了,
如果地址不相同,他會比較對象內容是否相同,如果相同會返回true。
總結如下:
equals()和==都是用於比較運算。
equals()是Object類中的一個方法,用於比較對象是否相等,在Object類中,它的含義
和==相同,比較的都是對象的地址,但有時我們要比較對象的內容,此時要重寫equals方法,例如String類就默認重寫了equals方法
比較對象的內容。
==是一個比較運算符,當它兩邊是基本數據類型時,就是直接比較兩個數據的值,當兩邊是對象時,比較的是對象的地址。
java中的equals與==