DEVLOG 10.27 ArrayList#removeAll遇到的小問題
參考內(nèi)容:
字符串常量池詳解:
cnblogs.com/Andya/p/14067618.html
Java中的String常量池
Java在棧上保存變量,在對(duì)象聲明實(shí)例,將對(duì)象名指向堆中創(chuàng)建的對(duì)象實(shí)例。Java在堆上同時(shí)還有字符串常量池。
這句話會(huì)完成以下操作:
在String常量池中尋找是否存在"123"這個(gè)字符串,如果沒有的話則創(chuàng)建
在堆上創(chuàng)建一個(gè)String類型的變量,其中的內(nèi)容是123字符串
將變量名稱a指向創(chuàng)建好的String變量
一個(gè)經(jīng)典的例子:
答案是:

遇到的一個(gè)小問題:
結(jié)果是空。這是因?yàn)锳rrayList#removeAll主要是進(jìn)行兩個(gè)操作:
遍歷調(diào)用的List的每個(gè)元素
如果contains返回True
在ArrayList中contains比較的是具體的類的equals的實(shí)現(xiàn)。在String中equals比較就是內(nèi)容相同:
因此這里并不是因?yàn)镾tring字符串常量池造成的引用相同的問題。

標(biāo)簽: