==: 它的作用是判斷兩個(gè)對(duì)象的地址是不是相等建蹄。即判斷兩個(gè)對(duì)象是不是同一個(gè)對(duì)象。(對(duì)于基本類(lèi)型,==比較的是值。對(duì)于引用數(shù)據(jù)類(lèi)型,==比較的是內(nèi)存地址)嗦锐。
equals():它的作用也是判斷兩個(gè)對(duì)象是否相等液走。一般有兩種情況:
- 情況1:類(lèi)沒(méi)有覆蓋equals()方法巷懈。則通過(guò)equals()比較該類(lèi)的兩個(gè)對(duì)象時(shí)顶燕,等價(jià)于通過(guò)“==”比較這兩個(gè)對(duì)象恳谎。
- 情況2:類(lèi)覆蓋了equals()方法。一般,我們都覆蓋equals()方法來(lái)比較兩個(gè)對(duì)象的內(nèi)容是否相等责循;若內(nèi)容相等歹垫,則返回ture排惨。
例如:
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 為?個(gè)引?
String b = new String("ab"); // b為另?個(gè)引?,對(duì)象的內(nèi)容?樣
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 從常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false畜晰,?同?對(duì)象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
String 中的 equals ?法是被重寫(xiě)過(guò)的,因?yàn)?String 的 equals ?法比較的是對(duì)象的值。
當(dāng)創(chuàng)建 String 類(lèi)型的對(duì)象時(shí),虛擬機(jī)會(huì)在常量池中查找有沒(méi)有已經(jīng)存在的值和要?jiǎng)?chuàng)建的值相同的對(duì)象,如果有就把它賦給當(dāng)前引?访锻。如果沒(méi)有就在常量池中重新創(chuàng)建?個(gè) String 對(duì)象龟虎,所以aa和bb是相同對(duì)象的引用。
42和42.0用==比較的是值花盐。