【发布时间】:2014-04-03 12:42:33
【问题描述】:
class Foo{}
class Boo{}
class MyString
{
public static void main (String[] args) throws java.lang.Exception
{
String s1="Hello";
String s2="Hello";
String s3=new String("Hello");
System.out.println(s1.hashCode()+" "+(s1==s2));
System.out.println(s2.hashCode());
System.out.println(s3.hashCode()+" "+(s2==s3));
System.out.println(new Boo().hashCode());
System.out.println(new Foo().hashCode());
}
}
上述代码的输出是
69609650 true
69609650
69609650 false
17351095
9318325
因为字面量池 s1 和 s2 指的是同一个对象,所以s1==s2 给出了真值。而 s3 是使用 new 关键字创建的 String 对象。所以s2==s3 给出了 false。
我试图通过使用hashCode()来证明 s2 和 s3 在不同的位置
然后我才知道不同的对象不需要有不同的hashCodes 并且字符串内容用于产生hashCode 值
所以我的问题是
如何证明 s2 和 s3 在不同的内存位置? (使用 == 除外)是否有任何内置方法来检查内存位置?
如果 hashCode 值是通过使用其内容为字符串计算的,那么它是如何为 new Foo().hashCode() 工作的?
【问题讨论】:
-
Is there any inbuilt method to check the memory location这就是==的用途。 -
查找
Object.hashCode()的javadoc。它解释了你所问的一切。 -
你可能也想看看
System#identityHashCode(Object)