java中==和equals的區別


本文非原創,參考鏈接 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方法的情況下,他們之間的比較還是內存中的存放位置的地址值,跟雙等號(==)的結果相同;如果被重寫,按照重寫的要求來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM