Ответ
String — это встроенный, специально оптимизированный и неизменяемый (immutable) класс в Java для работы с последовательностями символов.
Кастомный объект — это экземпляр любого класса, созданного разработчиком, поведение которого (изменяемость, сравнение) определяется в коде.
Основные различия:
- Иммутабельность: Объекты
Stringнеизменяемы. Любая операция, изменяющая строку, возвращает новый объект. Кастомный объект по умолчанию изменяем (mutable), если не реализован как immutable. - Пул строк (String Pool):
Stringиспользует механизм кэширования литералов для экономии памяти. Для кастомных объектов такого пула по умолчанию нет. - Сравнение: Для
Stringвсегда следует использоватьequals()для сравнения содержимого. Оператор==сравнивает ссылки, что из-за пула строк может давать неочевидные результаты. Для кастомных объектовequals()иhashCode()нужно переопределять явно. - Встроенная функциональность:
Stringимеет богатый API (substring(),matches(),format()и т.д.). Для кастомного класса все методы определяются разработчиком.
Пример:
// String - неизменяемый
String str = "Hello";
str.toUpperCase(); // Возвращает НОВЫЙ объект "HELLO", исходный `str` не изменился
// Кастомный объект - может быть изменяемым
class Person {
private String name;
public void setName(String name) { this.name = name; } // Мутатор
}
Person person = new Person("Alice");
person.setName("Bob"); // Состояние объекта изменено