前幾天突然又接觸了java的.equals()和==發現有新的收獲。首先,讓我們來看一下他們的區別。
(1)比較java基本類型:
比較基本類型只能用"==",不能用"equals",這里的"=="比較的是兩個基本類型的值
(2)比較包裝類:這里拿Integer來舉例,Character不能用"=="比較,不知道為什么?
public class TestEquals { public static void main(String[] args) { Integer b1=new Integer(1); Integer b2=new Integer(1); System.out.println(b1==b2); System.out.println(b1.equals(b2)); } }
輸出的結果是:false
true
這邊"=="比較的是對象的內存地址,new了兩個不同的對象所存放的地址是不一樣的,這邊的"equals"比較的就是內容,這里為什么比較的是內容,equals里的重寫了equals的方法。附上源碼:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
(3) 比較String
"=="比較的是內存地址,"equals"比較的是值
(4)比較對象
TestEquals a=new TestEquals("x"); TestEquals b=new TestEquals("x"); System.out.println(a==b); System.out.println(a.equals(b));
輸出結果:false
false
這里"=="比較的是內存地址,"equals"比較的也是地址,沒有重寫equals方法的類都是調用的Object的equals的方法,
public boolean equals(Object obj) { return (this == obj); }
總結:"=="除了比較基本數據之外都是比較的內存地址
"equals"除了沒有沒有重寫equals方法的類之外都是比較的內容
