質問: t3);`ではTest型データのため、String型データと同様に「同じ参照情報を持っているか」を比較し 「false」 が出力されると考えました。 (実行結果はtrue : false : false であると考えました。) ですが、解答では > > true : true : false > > > と出力される。と記載されており、どうやっても理解ができませんでした。 上記につきまして、初歩的な質問で申し訳ございませんが、どのように理解をするべきなのか、どこで解釈が間違っているのかを解説していただけないでしょうか。 何卒よろしくお願いいたします。
回答: Javaでの`==`は確かに「オブジェクト同士の比較」ですが、文字列の場合は**インターン**といって、「(特にリテラルそのままの文字列の場合)別な箇所で生成した同じ内容の文字列が、同じオブジェクトを指す」ことが発生することもあります(イミュータブルなので、オブジェクト自体の属性を気にしないかぎり、他への影響はありません)。 言語によってはインターンしてくれることを保証する場合もあるのですが、Javaではそうなっていないので、同じ内容の文字列を`==`で比較した場合、「trueになるかfalseになるかはわからない」としか言えません。 Java で "1" == "1" が true になる理由