我是新来的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. 分割字符串和存储
- 12. 将部分字符串存储在字符串数组中
- 13. 在数组中存储字符串并拆分字符串
- 14. 字符串和Permgen内存
- 15. 字符串的子串和存储在字符中
- 16. 存储在字符串
- 17. 存储字符串的my.settings
- 18. JAVA - 存储字符串和字符串的数量
- 19. 如何在.NET中的内存中存储字符串和字符类型?
- 20. 字符串的分配存储器
- 21. 存储分隔的字符串
- 22. 如何将字符串文字存储在内存中的c + +?
- 23. 保存以3个不同字符串分割的字符串的部分
- 24. 生成字符串和内存不足
- 25. 如何区分空字符串和不存在的值?
- 26. 该字符串存储器的哪部分内存?
- 27. 存储部分共享字符串的集合内存
- 28. 存储XML为字符串
- 29. Jasmin ByteCode存储字符串
- 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