CodeGym /Java Blog /ランダム /Java 文字列と等しい()
John Squirrels
レベル 41
San Francisco

Java 文字列と等しい()

ランダム グループに公開済み
オブジェクトの同等性を比較することは、最も重要なプログラミング操作の 1 つです。ただし、数値の世界では当然のことですが、他のデータ型を比較す​​る方法は必ずしも明確ではありません。Javaオブジェクトクラスは基本的なクラスで、比較のためのquals() メソッドcompareTo()メソッドを定義します。String クラスは、equals()メソッドをオーバーライドします。Java String equals()メソッドは、2 つの文字列をその内容に従って比較します。Stringquals ()メソッドのシグネチャは次のようになります。
public boolean equals(Object anotherObject)
String equals()メソッドは、文字列と指定されたオブジェクトを比較します。文字列が等しい場合は true を返し、そうでない場合は false を返します。なぜ==比較演算子を使用して文字列を比較しないのかと疑問に思われるかもしれません。実際、これも可能ですが、結果は多少異なります。実際のところ、==演算子はメモリ内のアドレスを比較します。したがって、s1 == s2 がtrueを返す場合、これら 2 つの文字列はメモリ内に同じアドレスを持ちます。同時に、equals は文字列の内容が等しいかどうかをチェックします。Java 文字列等しい () - 12 つの文字列を比較する例を見てみましょう。
public class StringEqualsTest {
   //program to test Java equals() method
   public static void main(String[] args) {
       String myString1 = "here is my favorite string";
       String myString2 = "here is my favorite string"; //this string is the same as the previous one, at least we think so
       String myString3 = "here is My favorite string"; //this string looks a little bit like previous two, but the first letter is big M instead of small m
       String myString4 = new String("here is my favorite string");
//here we create a String in an object manner… Why? Find out soon
       String myString5 = "equals to myString1? No, not at all..."; //here we have absolutely different string. Just for fun
    //let’s compare myString1 with myString2 using “==” operator
       System.out.println(myString1 == myString2); //true
    //let’s compare myString1 with myString4 using “==” operator
       System.out.println(myString1 == myString4); //false
//and now we are going to use equals() method to compare myString1 with myString4, myString2 and myString5
     System.out.println(myString1.equals(myString4));//true
       System.out.println(myString1.equals(myString2));//true
       System.out.println(myString1.equals(myString5)); //false

   }
}
このプログラムの出力は次のとおりです。
true false true true false
ここで何が起こっているのかを詳しく見てみましょう。文字列を作成すると、その文字列はメモリの特別な領域である文字列プールに配置されます。文字列は、大規模なプログラムのすべてのオブジェクトの大部分を占めます。そこで、メモリを節約するために、必要なテキストを含む文字列が配置される文字列プールが作成されました。その後新しく作成されたリンクは同じメモリ領域を参照するため、毎回追加のメモリを割り当てる必要はありません。new 演算子を使用せずに文字列を作成する場合、つまり次のように書く場合
String  myStringName = "...........................................",
またはそのような場合、プログラムはそのようなテキストを含む文字列が文字列プールに あるかどうかを確認します。そうである場合、新しい文字列は作成されません。そして、新しいリンクは、その文字列がすでに格納されている文字列プール内の同じアドレスを指します。それでプログラムに書いたとき
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
参照myString1 は、メモリ内のmyString2とまったく同じ場所を指します。最初のコマンドは、必要なテキストを含む新しい文字列を文字列プールに作成しました。2 番目のコマンドでは、単にmyString1と同じメモリ領域を参照しました。ただし、文字列myString4 はnew演算子を使用してオブジェクトとして作成されました。この演算子は、オブジェクトの作成時に、オブジェクトにメモリ内の新しい領域を割り当てます。newで作成した文字列
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
は、テキストが文字列プールの同じ文字列と完全に一致する場合でも、文字列プールには分類されませんが、別のオブジェクトになります。さらに、String equals()メソッドを使用して文字列を比較すると、アドレスではなく、文字列の内容、つまり文字列内の文字のシーケンスがチェックされます。また、文字列内のテキストが同じであれば、文字列がどのように作成され、文字列プールまたは別のメモリ領域のどこに保存されているかは関係ありません。この比較では、 myString1myString2myString4が等しいのはそのためです。ところで、String equals()メソッドを使用すると、大文字と小文字を区別して文字列を正しく比較できることに気づきましたか? つまり、文字列「my string」を文字列「My string」および「MY STRING」と比較すると false になります。
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");

       System.out.println(myString1.equals(myString2)); //false because first string myString1 has small m and myString2 has big M instead
       System.out.println(myString1.equals(myString3));//false because myString1 is in lowercase while myString3 is in uppercase

   }
}
出力は次のとおりです。
偽 偽
大文字と小文字を区別しない方法で文字列を比較するために、Java には、 equalsによく似たメソッドがあります。
boolean equalsIgnoreCase​(String anotherString)
例でそれを使用してみましょう。
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");
     /* here we are going to use the brother of equals() method, equalsIgnoreCase(). It can help to check user input when case isn’t
important */
       System.out.println(myString1.equalsIgnoreCase(myString2));

       System.out.println(myString1.equalsIgnoreCase(myString3));

   }
}
出力は次のようになります。
本当の本当の
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION