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
Java字符串證明平等
由於文字池s1的和s2是指相同的對象,以便s1==s2
給出真實的。並且s3是使用新的關鍵字創建的String對象。因此s2==s3
給出了錯誤。 我試圖證明,S2和S3在不同的位置使用hashCode()
後來我才知道不同的對象,不需要有不同hashCodes
和字符串的內容用於生產hashCode
值
所以我的問題是
如何證明s2和s3在不同的內存位置? (使用==除外)是否有任何內置的方法來檢查內存位置?
如果hashCode
通過使用其內容計算字符串的值,那麼它是如何工作的new Foo().hashCode()
?
'是否有任何內置的方法來檢查內存位置?這就是'=='的用途。 –
查找'Object.hashCode()'的javadoc。它解釋了你所問的一切。 –
你可能想看一下'System#identityHashCode(Object)' – Marco13