В «Эффективной JAVA» Джошуа Блоха, когда я читал о статических фабричных методах, было следующее утверждение.
Способность статических фабричных методов возвращать один и тот же объект при повторных вызовах позволяет классам поддерживать строгий контроль над тем, какие экземпляры существуют в любое время. Классы, которые делают это, называются управляемыми экземплярами. Есть несколько причин для написания классов, управляемых экземпляром. Управление экземпляром позволяет классу гарантировать, что он является одноэлементным (пункт 3) или не содержит экземпляров (пункт 4). Кроме того, он позволяет неизменяемому классу (статья 15) гарантировать, что не существует двух одинаковых экземпляров: a.equals(b) тогда и только тогда, когда a==b. Если класс предоставляет такую гарантию, то его клиенты могут использовать оператор == вместо метода equals(Object), что может повысить производительность. Типы Enum (статья 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.equals(b) тогда и только тогда, когда a==b , это означает, что он вводит косвенное требование, согласно которому не может быть объектов, ссылающихся на 2 разных пространства памяти и по-прежнему содержащих одни и те же данные, что является потерей памяти. Если они содержат одни и те же данные, они являются одним и тем же объектом. То есть они указывают на одно и то же место в памяти.
Прав ли я в этом выводе?
Если я ошибаюсь, можете ли вы помочь мне понять это?
a == b
. - person Chris Jester-Young   schedule 17.11.2013