-
1:ID:X3eixG · 2019-03-03

#java javaのStringについての質問です。
Stringは参照型なのにも関わらず、==で等値判定を行った際に文字列が同じだとtrueと判定されるのは何故でしょうか?
参照型であるIntegerで同じ数字を等値判定した場合はfalseとなります。
これは参照先を判定しているのでインスタンスの違いからfalseとなるのは理解出来ます。
しかし、それなら何故Stringの時にはfalseと判定されないのでしょうか?
この違いの理由をご存知の方がいらっしゃいましたら、ご教授頂けますと大変幸いでございます。
どうぞ宜しくお願い致します。

2 件の回答

2:ID:QSNsWB · 2019-03-05

new String('a') == new String('a');
false
ん??

3:ID:eyns6N · 2019-03-05

new String("a") == new String("a"); // false
"a" == "a"; // true
この違いを説明できないと駄目。
原因はJavaVMの設計にある。
String型は非常によく使われるため、同じ文字列データの場合は
内部的に同じ参照先を使うようになっているのが原因。
String型だけの例外的な仕様。
明示的にnewをした場合は、参照先が異なるので、falseとなる。
String型は参照型なので、== での比較はデータ内容ではなく、
参照先が同一かどうかの判定になる。
newで生成しない同一のStringデータは同一のオブジェクトが流用される。
そのため参照先が同一になるのでtrueとなる。

コメントの受付は終了しました。

一緒に読まれている質問

ページ上部に戻る