簡體   English   中英

java字符串證明平等

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM