Короткий ответ
Объект — это экземпляр класса: если класс это шаблон или чертёж, описывающий поля и методы, то объект — конкретная реализация шаблона с собственным набором значений полей. Например, класс Car описывает свойства машины, а объект — конкретную машину с моделью и цветом. Объект создаётся оператором new, также его можно получить рефлексией, клонированием или десериализацией.
Как это работает подробнее
Каждый объект занимает собственную область памяти в куче и имеет состояние, отличное от состояния других объектов того же класса. Важно различать объект и ссылку: переменная объектного типа хранит не сам объект, а ссылку — «адрес», по которому объект лежит в памяти. Ссылку можно переназначить на другой объект или в null, а на один объект могут одновременно указывать несколько ссылок.
- Класс — шаблон: какие поля и методы есть у сущности.
- Объект — экземпляр с конкретными значениями полей; размещается в куче.
- Ссылка — переменная, указывающая на объект; может быть переназначена или равна null.
- java.lang.Object — все объекты наследуют его и получают методы toString(), equals(), hashCode().
Пример кода
class Car {
String model;
String color;
Car(String model, String color) {
this.model = model;
this.color = color;
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Toyota", "красный"); // объект в куче
Car sameCar = myCar; // вторая ссылка на тот же объект
System.out.println(myCar == sameCar); // true: одна ссылка
}
}Что использовать на практике
- Создавай объекты через new с понятным конструктором или через фабричные методы.
- Помни, что переменная — это ссылка: копируя её, ты не копируешь сам объект.
- Работай с состоянием объекта через его методы, соблюдая инкапсуляцию.
Подводные камни
- Сравнение объектов через == сравнивает ссылки, а не содержимое — нужен equals().
- Присвоив ссылке null, ты теряешь доступ к объекту: он становится кандидатом на сборку мусора.
- Передача объекта в метод передаёт ссылку: изменения внутри метода видны вызывающему коду.
Как отвечать на собеседовании
- Начни с определения: объект — экземпляр класса → покажи разницу между классом-шаблоном и конкретными значениями → упомяни создание через new и память в куче → разведи объект и ссылку → добавь общее наследование от java.lang.Object.