[英]java String to prove equality
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
為true。 s3是使用new關鍵字創建的String對象。因此s2==s3
給出false。 我試圖通過使用hashCode()
來證明s2和s3位於不同的位置,然后我知道不同的對象不必具有不同的hashCodes
並且String內容用於產生hashCode
值
所以我的問題是
如何證明s2和s3在不同的內存位置? (使用==除外) 是否有任何內置方法來檢查內存位置?
如果hashCode
值是通過使用字符串的內容為String計算的,那么它如何用於new Foo().hashCode()
?
新Foo()。hashCode()的工作方式
首先,您需要了解hashCode()
方法是由Object
類實現的。 而且String
類剛剛重寫了此方法,以提供一種機制來不同地計算字符串對象的hashCode。
因此, new Foo().hashCode()
使用Object
類提供的defualt hashCode()實現。 由於Foo
類沒有通過重寫提供自己的hashCode()實現。
Object類提供的默認hashCode()
(本機方法)僅使用對象的內存引用來計算哈希碼值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.