我是新來的java,根據我的理解 String = "ABC"
將存儲在字符串池和String s=new String("ABC")
將創建一個新的內存來存儲值。如果我的理解是正確的,如何證明這一點,而不使用==
或equals()
方法? 我們可以使用散列碼證明這一點嗎? 我生成hashcode值爲兩個,它返回相同的值...爲什麼是...區分字符串和新字符串存儲在不同的內存
回答
...如何證明這一點,而不使用==或equals()方法?
最好的辦法來證明它在Java代碼中是使用==
。
當然,你不能在字符串上使用hashcode
來證明它,因爲它們將具有相同的散列碼。要理解這是爲什麼,請閱讀javadoc的String.hashCode()
。它解釋瞭如何計算字符串的哈希碼。
1 - 您可以通過比較System.identityHashCode(Object)
返回的值來證明。然而,這是一個循環的方法,證明依賴於對身份哈希碼實際意義的瞭解。
我產生了兩個哈希碼值,它返回相同的值......這是爲什麼......
閱讀的javadoc ......那麼你就會明白了。
你不能使用散列碼來證明這一點,因爲如果兩個字符串的值是相等的,這意味着它們具有相同的散列碼值。
您可以通過使用此運算符==
比較它們的參考來證明它。
看一下這個What's the difference between ".equals" and "=="?瞭解equal
方法和==
算子之間的確切區別。
不適,實際上錯誤的解釋。 – Crazyjavahacking 2015-04-03 12:28:34
具有相同值的兩個字符串具有相同的散列碼,並且此運算符「==」比較字符串的引用。 爲什麼這個解釋不正確? – Anarki 2015-04-03 13:56:39
對不起,我誤解了這一點,它是正確的。 – Crazyjavahacking 2015-04-03 17:16:40
- 1. 在字符串內存儲字符串?
- 2. 在字符串中存儲字符串
- 3. 字符串和字符串緩衝區內存概念
- 4. 字符串內存分配
- 5. 存儲字符串
- 6. 存儲字符串
- 7. 存儲字符串
- 8. 字符串內存分配和字符串池概念
- 9. 在數組中存儲字符串並拆分字符串
- 10. 字符串的子串和存儲在字符中
- 11. 存儲字符串的my.settings
- 12. 如何將字符串文字存儲在內存中的c + +?
- 13. 生成字符串和內存不足
- 14. SQL存儲字符串
- 15. LINQ - 存儲爲字符串
- 16. 存儲XML字符串
- 17. 存儲XML爲字符串
- 18. Python何時爲相同的字符串分配新內存?
- 19. 將字符串的地址存儲在字符串數組中
- 20. 比較字符串存儲在Android的字符串資源?
- 21. 爲什麼字符串存儲在Java中的字符串池?
- 22. mySQL只存儲部分字符串
- 23. 如何我分隔字符串和各部分儲存在不同的載體
- 24. 字符串分割到字符和數字並存儲在地圖的Python
- 25. 列表和區分INT和字符串值的字符串值
- 26. 在kdb中存儲一個字符串作爲字符串
- 27. 存儲在字符串池中唯一字符串lliterals?
- 28. 在Redis中存儲整數和字符串的區別
- 29. C字符串內存分配隱式?
- 30. 如何爲字符串分配內存?
因爲即使內存中的對象不相同,值是,並且等於將返回true。如果equals返回true,那麼hashcode必須返回相同的值(除非您打算編寫代碼,需要花費一些額外的調試時間) – Stultuske 2015-04-03 10:56:14
是否有任何方法可以在不使用equals的情況下證明這一點? – Ramakrishna 2015-04-03 10:58:48
來證明什麼,到底是什麼?這兩個對象是平等的?你可以使用compareTo方法 – Stultuske 2015-04-03 10:59:37