今回もJavaについての備忘録を記載していく。今回はString型文字列の比較方法についてである。
結論: equals()メソッドを使おう
結論から書いてしまうが、Javaの場合文字列比較には==比較演算子ではなく、equals()メソッドを用いる。
以下、2つのパターンを通して==比較演算子とequals()メソッドの違いを見ていくことにする。
パターン1
String str1 = "Java";
String str2 = "Java";
System.out.println(str1.equals(str2)); //出力結果: true
System.out.println(str1 == str2); //出力結果: true
パターン1の場合、==比較演算子でも結果がtrueになる。しかし次の場合はどうだろうか。
パターン2
String str3 = "Java";
String str4 = new String("Java");
System.out.println(str1.equals(str2)); //出力結果: true
System.out.println(str1 == str2); //出力結果: false
パターン2の場合、==比較演算子では結果がfalseになる。
「==」は等値判定、equals()は等価判定である
なぜ上記のような出力結果の違いが出るかというと、JavaのString型はintのようなプリミティブ型ではなく、参照型であることに起因する。
String型変数において==比較演算子を使うと、対象となる2つの文字列が等値かどうかを判定する。等値判定では、文字列の値そのものではなく、参照先(アドレス)が同じかどうかを判定する。そのため、パターン2では比較しているオブジェクトが別のものであるのでfalse判定になる。
一方、パターン1で==比較演算子の結果がtrueになる理由は、同じ文字列を別の変数に格納した場合、その変数には自動で前と同じ参照先のString型オブジェクトが格納されるためである。
以上の理由より、文字列の値そのものに注目して比較を行う場合、等価判定を行うことができるequals()メソッドを用いる必要がある。