1. ホーム
  2. java

[解決済み] ストリングビルダー.イコール Java

2022-03-04 19:52:04

質問

class strb
{

    static public void main(String...string)
    {
         StringBuilder s1 = new StringBuilder("Test");
         StringBuilder s2 = new StringBuilder("Test");

         System.out.println(s1);
         System.out.println(s2);
         System.out.println(s1==s2);
         System.out.println(s1.equals(s2)); //Line 1
         System.out.println(s1.toString()==s2.toString()); //Line 2
         if(s1.toString()==s2.toString())System.out.println("True"); //Line 3
    }

}

そして、その出力は

Test
Test
false
false

.equalsについてちょっと質問です。

オブジェクトの内容に関係なく .equals は、両方のオブジェクト参照が同じオブジェクトを指している場合にのみ、真を返しますか?


EDIT : の部分が理解できました。 .equals が、なぜ2行目、3行目も true ?

EDIT : 確か == は参照変数のアドレスを見るので、s1とs2が等しくなることはあり得ません。私の仮定が正しくない場合は、修正してください。

どのように解決するのですか?

はい。 StringBuilder does not override Object's .equals() function となり、2つのオブジェクトの参照は同じではないので、結果は偽となります。

について StringBuilder を使用することができます。 s1.toString().equals(s2.toString())

今回の編集では == 演算子を 2 つの異なる String オブジェクトに適用します。この演算子は == 演算子は false を返します。文字列を比較するには String.equals() または String.equalsIgnoreCase()

先ほどと同じ問題です