• ベストアンサー

ifの条件式で文字列を使う場合

例えば、 String str = "条件";//こういう場合に、 if(str == "条件")//これはだめだけど、 if(str.equals("条件"))//これはいい となると思います。 何となく、上の式でも通じそうなのですが、なぜ動かないのでしょうか? 「そういうもん」と思うべきことなのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#130082
noname#130082
回答No.2

Javaでは文字列もオブジェクトの一種です。 ですから、内容の文字がすべてまったく同じ文字列が2つ以上存在することはごく普通のことです(オブジェクトとしては別物になるわけです)。OSにたとえれば、HDD内のファイルを考えても、内容はまったく同じのファイルをふたつ作れますね?ファイルの内容は同じでも別ファイルとなります。 ==では、「まったく同じオブジェクト」のときだけtrueとなり、内容が同じでも、異なったオブジェクトとしての文字列ではfalseとなってしまいます。 一方、equals()を使うときは、文字列としての内容が一致するときにtrueを返します。 文字列を比較するときは、普通、文字列としての内容が一致するかどうかを調べたいので、==ではなくequals()が使われます。==で動かないわけではなく、期待する結果が得られない、ということです。

その他の回答 (1)

回答No.1

==はオブジェクトの比較。 str.equalsはStringオブジェクトの中に定義されているequalsメソッドの返値だからです。 ”条件”とすると、内部では、”条件”というValueを持ったStringインスタンスが生成されます。 String str = "条件"で生成されたインスタンスと str=="条件"の "条件"で生成されたインスタンスは同じ"条件"というValueは持っていますが、インスタンス自体は同一ではないので、str =="条件"はfalseが返ります。 str.equals("条件")は、Stringオブジェクトのequalsメソッドが String("条件")というインスタンスを受け取って、その内部の値を比較して、同じであればTrueを返すような仕組みとなっています。 ちなみにJavaの場合、""でくくると、自動的にString型のインスタンスが生成されます。

関連するQ&A

専門家に質問してみよう