本文非原創,參考鏈接 http://www.cnblogs.com/smyhvae/p/3929585.html
==
基本數據類型:比較的是值
引用數據類型:比較的是堆內存地址,他們在內存中的存放地址
注意:如果是同一個new出來的對象(在堆內存中是同一個區域),比較的結果為true,否則為false,因為每new一次,都會重新開辟堆內存空間
equals
不能用於基本數據類型比較,繼承於Object這個超類,只有引用數據類型才有equals方法。
默認情況下比較的堆內存地址值,一般在一些類中該方法被重寫,比較對象的成員變量值是否相同。
在Object類中定義了一個equals的方法,equals的源碼是這樣寫的
public boolean equals(Object obj) {
return (this == obj);
}
可以看到,這個方法的初始默認行為是比較對象的內存地址值,一般來說,意義不大。所以,在一些類庫當中這個方法被重寫了,如String、Integer、Date。在這些類當中equals有其自身的實現(一般都是用來比較對象的成員變量值是否相同),而不再是比較類在堆內存中的存放地址了。
對於引用型變量進行equals比較,在沒有重寫equals方法的情況下,他們之間的比較還是內存中的存放位置的地址值,跟雙等號(==)的結果相同;如果被重寫,按照重寫的要求來。