ここでは、Java 8 以前の String.equals 関数について紹介します。
ソースコードは以下の通りです:
非常にシンプルで、まず 2 つの文字列オブジェクトのアドレスが同じかどうかを判断し、同じであれば true を返します。次に、Java 8 では char [] 配列を使用して文字列値を格納するため、対応する char 値を順番に取り出して同じかどうかを判断します。
注意
Java 8 およびそれ以前のバージョンでは、文字列は内部で char 配列を使用して文字データを格納し、オフセットと長さを記録するために追加の int 型フィールドを使用しています。この表現方法は、大量の ASCII 文字を含む文字列ではスペースの浪費を引き起こす可能性があります。なぜなら、各文字は依然として 2 バイトのストレージスペースを占有するからです。
Java 9 では、Compact Strings の概念が導入され、Latin-1 文字セット(つまり、Unicode エンコード範囲が U+0000 から U+00FF の間にある)のみを含む文字列に対しては、データをバイト配列で格納し、各文字が 1 バイトだけを占有するようになりました。これにより、この種の文字列のメモリ使用量を大幅に削減できます。非 Latin-1 文字を含む文字列に対しては、引き続き char 配列を使用してデータを格納し、各文字が 2 バイトを占有します。