つまり、文字列s、tの2つの変数がs == tの場合、s.equals(t)はtrueを返すことが保証されていますか?javaの参照等価は文字列の構造上の等価性を意味しますか?
私は、これは明らかにはいだったと思っていましたが、私の教授が入門プログラミングクラスの最終テストを提供しています。思考?
** NEVERMIND:これらはnullになる可能性があるため、参考に等しいと認識しましたが、その上で.equalsを呼び出すことはできません。
つまり、文字列s、tの2つの変数がs == tの場合、s.equals(t)はtrueを返すことが保証されていますか?javaの参照等価は文字列の構造上の等価性を意味しますか?
私は、これは明らかにはいだったと思っていましたが、私の教授が入門プログラミングクラスの最終テストを提供しています。思考?
** NEVERMIND:これらはnullになる可能性があるため、参考に等しいと認識しましたが、その上で.equalsを呼び出すことはできません。
==
は、2つのオブジェクトへのポインタが同じであることを意味します。つまり、オブジェクトは同じメモリ位置に格納されます。それが本当であれば、それらは同じオブジェクトであり、同じ値を保持しなければならないので、.equals()
も同様になります。
逆は真ではないことに注意してください。.equals()
が真であることは、==
が真となることを保証しません。
唯一の例外は、.equals()
メソッドをオーバーライドして常にfalseを返すか、または両方のオブジェクトがnull
の場合です。
いいえ、それは同じことを意味しません。
s1==s2
は、文字列プールのs1
とs2
の参照が同じであるかどうかを返しません。
s1.equals(s2)
は、文字列s1
とs2
の内容を確認します。
「ヌル」の場合は? – Maljam
両方の変数の値が「null」であるかどうかを検討してください。私はそれがあなたの教授が何を意味するのか分かりませんが、そうでない場合、彼は間違っています。 [ソースからストレート](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/lang/String.java?av=f#964) –
ありがとう! @Maljam –