JavaSilverでメモしたところ備忘録として残しておこうと思います。
- 勉強したては"equals"と"=="がごっちゃになってしまい分からなくなってしまいましたがstringクラスにおけるequalsはオーバラードされているということが分かってから理解が深まりました!
Javaの同一性・同値性
- インスタンスは異なるが同じ値を持っている
同値性
String str1 = new String("ABC");
String str2 = new String("ABC");
System.out.println(str1 == str2);
//falseと出力される
System.out.println(str.equals(str2));
//trueと出力される
- 複数の変数が同じインスタンスを参照していることを
同一性
String str1 = "ABC";
String str2 = str1;
String str3 = new String("ABC");
String str4 = "ABC";
System.out.println(str1 == str2);
//trueと出力される
System.out.println(str1 == str3);
//falseと出力される
System.out.println(str1 == str4);
//trueと出力される
equalsメソッドについて
-
objectクラスにあり、すべてのクラスに継承される
-
プリミティブ型においては
同値性
を見るため==
が使われ、
参照型では==
もequals()
のどちらもインスタンス参照先の同一性
を見る -
objectクラスの場合は
同一性
を判別しnullはfalse
-
Strnigクラス内のequalsメソッドはobjectクラスのequalsメソッドをオーバーライドしていて
同値性
を判別しnullは実行時エラー
String str1 = "He";
String str2 = "He";
System.out.println(str1 == str2);
str1 += "llo";
str2 += "llo";
System.out.println(str1 == str2);
//実行結果
true
false
補足
- 一般的に参照型では
==
を使わず判別を行ってもfalseになるが-128~127の間ではtrue
が出てしまう
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
//trueが出力される
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
//falseが出力される