- ベストアンサー
ifの条件式で文字列を使う場合
例えば、 String str = "条件";//こういう場合に、 if(str == "条件")//これはだめだけど、 if(str.equals("条件"))//これはいい となると思います。 何となく、上の式でも通じそうなのですが、なぜ動かないのでしょうか? 「そういうもん」と思うべきことなのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Javaでは文字列もオブジェクトの一種です。 ですから、内容の文字がすべてまったく同じ文字列が2つ以上存在することはごく普通のことです(オブジェクトとしては別物になるわけです)。OSにたとえれば、HDD内のファイルを考えても、内容はまったく同じのファイルをふたつ作れますね?ファイルの内容は同じでも別ファイルとなります。 ==では、「まったく同じオブジェクト」のときだけtrueとなり、内容が同じでも、異なったオブジェクトとしての文字列ではfalseとなってしまいます。 一方、equals()を使うときは、文字列としての内容が一致するときにtrueを返します。 文字列を比較するときは、普通、文字列としての内容が一致するかどうかを調べたいので、==ではなくequals()が使われます。==で動かないわけではなく、期待する結果が得られない、ということです。
その他の回答 (1)
- wildcat-yp
- ベストアンサー率37% (303/813)
==はオブジェクトの比較。 str.equalsはStringオブジェクトの中に定義されているequalsメソッドの返値だからです。 ”条件”とすると、内部では、”条件”というValueを持ったStringインスタンスが生成されます。 String str = "条件"で生成されたインスタンスと str=="条件"の "条件"で生成されたインスタンスは同じ"条件"というValueは持っていますが、インスタンス自体は同一ではないので、str =="条件"はfalseが返ります。 str.equals("条件")は、Stringオブジェクトのequalsメソッドが String("条件")というインスタンスを受け取って、その内部の値を比較して、同じであればTrueを返すような仕組みとなっています。 ちなみにJavaの場合、""でくくると、自動的にString型のインスタンスが生成されます。