Можно ли создать класс, созданный с помощью только оператора =, как это делает класс String? Или это функция, специфичная для класса String в Java?
Создавать неизменяемый объект, созданный без новых
Ответ 1
Поскольку Java не поддерживает пользовательскую перегрузку оператора, новый экземпляр не может быть создан с помощью = Operator.
Отъезд Почему Java не предлагает перегрузку оператора? для получения дополнительной информации
Ответ 2
Нет, вы не можете создать класс, созданный только с помощью оператора =, потому что вы не можете перегружать оператор в Java, как вы можете, на С++ или С# (см. Перегрузка оператора в Java).
String создаются при использовании "something" только в том случае, если он еще не существует в памяти, поэтому вы получаете ссылку на тот же самый точный объект String каждый раз, когда вы пишете "something".
Например, если вы выполните:
String a = "something";
String b = "something";
Тогда
a == b; // will be true.
Вы можете взглянуть на эти вопросы, чтобы узнать больше о том, как работают объекты String:
Ответ 3
Код String s = "Hello World!" не создает новый String. Он присваивает ссылку String, существующей в пуле строк, на s. Если String не существует в String Pool, тогда в String Pool создается новый объект String, но не только оператор =.
Это создает новые объекты String objecs:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
Это может создать или не создать новый объект String в String Pool:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
Вы можете приблизиться к описанному выше поведению с использованием шаблона getInstance(), рассмотрите это:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
Затем вы можете использовать:
Singleton s = Singleton.getInstance();