不明点
現在OCJP Goldを学習中の初心者です。
ObjectクラスとStringクラスの動作で、どうしても理解ができない部分があったため、質問させていただきます。
Java
1public class Test { 2 public static void main(String[] args) { 3 String s1 = new String("A"); 4 String s2 = new String("A"); 5 6 System.out.println("s1.hashCode() : " + s1.hashCode()); 7 System.out.println("s2.hashCode() : " + s2.hashCode()); 8 System.out.println("s1 == s2 : " + (s1 == s2)); 9 System.out.println("s1.equals(s2) : " + s1.equals(s2)); 10 System.out.println(); 11 12 Object obj1 = new Object(); 13 Object obj2 = new Object(); 14 System.out.println("obj1.hashCode() : " + obj1.hashCode()); 15 System.out.println("obj2.hashCode() : " + obj2.hashCode()); 16 System.out.println("obj1 == obj2 : " + (obj1 == obj2)); 17 System.out.println("obj1.equals(obj2) : " + obj1.equals(obj2)); 18 System.out.println(); 19 } 20}
plain
1s1.hashCode() : 65 2s2.hashCode() : 65 3s1 == s2 : false 4s1.equals(s2) : true 5 6obj1.hashCode() : 2018699554 7obj2.hashCode() : 1311053135 8obj1 == obj2 : false 9obj1.equals(obj2) : false
このコードのなかで、それぞれのObjectクラスのインスタンスはnewされているため、ハッシュコードが異なり == でも { equals() } でもfalseになってしまうのは理解できます。
しかし、同様にStringクラスのインスタンスも互いにnewされているため、{ hashCode() } の返す値は異なると思うのですが、同じものになってしまう理由がわかりません。
調べてみようとしたものの、検索の能力が低く、ObjectクラスとStringクラスのそれぞれのメソッドの動作差について見つけることができなかったため、こちらにて質問させていただきます。
拙い文章で申し訳ないですが、よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。