2016-05-09 9 views
1

つまり、文字列s、tの2つの変数がs == tの場合、s.equals(t)はtrueを返すことが保証されていますか?javaの参照等価は文字列の構造上の等価性を意味しますか?

私は、これは明らかにはいだったと思っていましたが、私の教授が入門プログラミングクラスの最終テストを提供しています。思考?

** NEVERMIND:これらはnullになる可能性があるため、参考に等しいと認識しましたが、その上で.equalsを呼び出すことはできません。

+2

「ヌル」の場合は? – Maljam

+2

両方の変数の値が「null」であるかどうかを検討してください。私はそれがあなたの教授が何を意味するのか分かりませんが、そうでない場合、彼は間違っています。 [ソースからストレート](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/lang/String.java?av=f#964) –

+0

ありがとう! @Maljam –

答えて

0

==は、2つのオブジェクトへのポインタが同じであることを意味します。つまり、オブジェクトは同じメモリ位置に格納されます。それが本当であれば、それらは同じオブジェクトであり、同じ値を保持しなければならないので、.equals()も同様になります。

逆は真ではないことに注意してください。.equals()が真であることは、==が真となることを保証しません。

唯一の例外は、.equals()メソッドをオーバーライドして常にfalseを返すか、または両方のオブジェクトがnullの場合です。

0

いいえ、それは同じことを意味しません。

s1==s2は、文字列プールのs1s2の参照が同じであるかどうかを返しません。

s1.equals(s2)は、文字列s1s2の内容を確認します。