2015-04-03 46 views
0

我是新来的java,根据我的理解 String = "ABC"将存储在字符串池和String s=new String("ABC")将创建一个新的内存来存储值。如果我的理解是正确的,如何证明这一点,而不使用==equals()方法? 我们可以使用散列码证明这一点吗? 我生成hashcode值为两个,它返回相同的值...为什么是...区分字符串和新字符串存储在不同的内存

+0

因为即使内存中的对象不相同,值是,并且等于将返回true。如果equals返回true,那么hashcode必须返回相同的值(除非您打算编写代码,需要花费一些额外的调试时间) – Stultuske 2015-04-03 10:56:14

+0

是否有任何方法可以在不使用equals的情况下证明这一点? – Ramakrishna 2015-04-03 10:58:48

+0

来证明什么,到底是什么?这两个对象是平等的?你可以使用compareTo方法 – Stultuske 2015-04-03 10:59:37

回答

0

...如何证明这一点,而不使用==或equals()方法?

最好的办法来证明它在Java代码中是使用==

当然,你不能在字符串上使用hashcode来证明它,因为它们将具有相同的散列码。要理解这是为什么,请阅读javadocString.hashCode()。它解释了如何计算字符串的哈希码。

1 - 您可以通过比较System.identityHashCode(Object)返回的值来证明。然而,这是一个循环的方法,证明依赖于对身份哈希码实际意义的了解。


我产生了两个哈希码值,它返回相同的值......这是为什么......

阅读的javadoc ......那么你就会明白了。

-1

你不能使用散列码来证明这一点,因为如果两个字符串的值是相等的,这意味着它们具有相同的散列码值。

您可以通过使用此运算符==比较它们的参考来证明它。

看一下这个What's the difference between ".equals" and "=="?了解equal方法和==算子之间的确切区别。

+0

不适,实际上错误的解释。 – Crazyjavahacking 2015-04-03 12:28:34

+0

具有相同值的两个字符串具有相同的散列码,并且此运算符“==”比较字符串的引用。 为什么这个解释不正确? – Anarki 2015-04-03 13:56:39

+0

对不起,我误解了这一点,它是正确的。 – Crazyjavahacking 2015-04-03 17:16:40