java對象,引用對象,內容相等,地址相等問題


一、看了一篇博主的文章,是關於java對象相等的問題,在這里直接轉載該博主對這個問題的探索:

       文章博客地址:https://blog.csdn.net/yjclsx/article/details/80830324

 

二、對於一個java對象,我們應該知道有幾個點:

  1、對象:對象是沒有名字的,舉個例子;Person per = new Person(),注意,這里的Person不是對象名,你可以想一下,如果這是對象名的話,那么,Person per1 = new Person()完之后,這個對象名也是Person?很顯然不是,這里的Person只是個類模板,我們可以據此創建出無數個對象,只是這些對象沒有名字,我們沒法直接訪問,只能通過創建對象引用來進行間接訪問對象。

  2、對象引用:上面的per就是我們所說的對象引用,Person per = new Person()其實是分成兩步:

       (1)Person per,創建一個對象引用。

    (2)per =  new Person(),new Person()才是創建對象的語句,賦值號就是指:將對象引用指向所創建的對象。

  3、對象地址:java中對象是存在java堆中,每new一個,就相當於新創建一個對象(分配一個存儲對象的唯一地址,但對象引用是存儲在java堆中的)。因為引用與引用之間也是可以賦值的—>代表兩個對象引用指向同一個對象。

  4、對象內容:例如創建基本數據類型:Integer a = new Integer(5);對象的內容就是5,如果說有兩個對象引用指向同一個對象,那么哪一個對象引用對對象的內容進行了更改操作,那么另外一個對象引用所指向的對象的內容也是一樣的,這就相當於兩人吃同一盤菜,一個人夾走了一些,那么另外一個人看到的也一樣是夾走一些的那盤菜了。

知道上面的概念之后,就很容易明白下面說的區別了:

  (1)object中的equals():用來檢測兩個對象是否相等(是否是對同一個對象的引用)/兩個對象的內容是否相等,而不是指在堆內存中的地址。

  (2)“==”:用於比較基本數據類型時比較的是值,用於比較引用類型時比較的是引用指向的地址。

 


免責聲明!

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



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