==
オブジェクト/文字列/何でものアドレスを比較します
.equals()
比較のためにオブジェクトの内部状態を使用するように設計されています。
そう:
new Object() == new Object() => false
- メモリ内の異なるアドレスにある 2 つの個別のオブジェクト。
new String("a") == new String("a") => false
- 同じ状況 - 文字列オブジェクトの 2 つの別々のアドレス。
new String("a").equals(new String("a")) => true
- アドレスは異なりますが、Java は 1 つのオブジェクト状態 ('a') を取り、他のオブジェクト状態 ('a') と比較すると、それらが等しいことがわかり、true を報告します。
equals() メソッドを使用すると、プログラムに適した方法で比較をコーディングできます。
intern()
は少し違う話です。同じ char シーケンスに対して同じオブジェクト (アドレス) を返すことを意図しています。同じ文字列を複数回構築する場合に必要なメモリ量を減らすのに役立ちます。
new String("aaa").intern()
誰かが以前に「aaa」文字列を作成したことがある場合は、マシンのメモリをシークし、文字列の最初のインスタンスを返します...見つからない場合-現在のインスタンスが最初のすべての「aaa」.internとして登録されます() および newString("aaa").intern()
であり、("a"+"aa").intern()
その「最初の」インスタンスを返します。
注意:"aaa".intern()
操作はそれほど高速ではありません。すべての文字列をインターンすると、メモリがいくらか節約されますが、かなりの量の CPU 作業が失われます。