Joshua Bloch 著の「Effective JAVA」で、静的ファクトリ メソッドについて読んでいたときに、次のような記述がありました。
繰り返し呼び出しから同じオブジェクトを返す静的ファクトリ メソッドの機能により、クラスは常にどのインスタンスが存在するかを厳密に制御できます。これを行うクラスは、インスタンス制御であると言われています。インスタンス制御クラスを作成する理由はいくつかあります。インスタンス制御により、クラスはそれがシングルトン (項目 3) またはインスタンス化不可能 (項目 4) であることを保証できます。また、不変クラス (項目 15) が、2 つの等しいインスタンスが存在しないことを保証できるようにします: a.equals(b) は、a==b の場合のみです。クラスがこれを保証する場合、そのクライアントは equals(Object) メソッドの代わりに == 演算子を使用できるため、パフォーマンスが向上する可能性があります。列挙型 (項目 30) は、この保証を提供します。
== 演算子がどのようにパフォーマンスの向上をもたらすかを調べるために、 String.javaを調べる必要がありました。
このスニペットを見ました
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
パフォーマンスの向上によって、彼はここで何を意味しますか? それがどのようにパフォーマンスの向上をもたらすか。
彼は次のように言うつもりですか
すべてのクラスが a==b の場合にのみ a.equals(b) を保証できる場合、それは、2 つの異なるメモリ空間を参照するオブジェクトが存在できず、メモリである同じ data を保持することができないという間接的な要件をもたらすことを意味します。無駄。それらが同じデータを保持している場合、それらは1つの同じオブジェクトです。つまり、同じメモリ位置を指しています。
私はこの推論で正しいですか?
私が間違っている場合は、これを理解するために私を導くことができますか?