Ответ 1
Поскольку Java не поддерживает пользовательскую перегрузку оператора, новый экземпляр не может быть создан с помощью =
Operator.
Отъезд Почему Java не предлагает перегрузку оператора? для получения дополнительной информации
Можно ли создать класс, созданный с помощью только оператора =
, как это делает класс String
? Или это функция, специфичная для класса String
в Java?
Поскольку Java не поддерживает пользовательскую перегрузку оператора, новый экземпляр не может быть создан с помощью =
Operator.
Отъезд Почему Java не предлагает перегрузку оператора? для получения дополнительной информации
Нет, вы не можете создать класс, созданный только с помощью оператора =
, потому что вы не можете перегружать оператор в Java, как вы можете, на С++ или С# (см. Перегрузка оператора в Java).
String
создаются при использовании "something"
только в том случае, если он еще не существует в памяти, поэтому вы получаете ссылку на тот же самый точный объект String
каждый раз, когда вы пишете "something"
.
Например, если вы выполните:
String a = "something";
String b = "something";
Тогда
a == b; // will be true.
Вы можете взглянуть на эти вопросы, чтобы узнать больше о том, как работают объекты String
:
Код 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();