"Объект" vs "Переменная объекта" в Java? - программирование

"Объект" vs "Переменная объекта" в Java?

Я преподаю себе Java, и одно из упражнений по обзору в моей книге задает разницу между "объектом" и "переменной объекта".

Я знаю, что такое объект (конкретный экземпляр класса), но я не могу найти термин "объектная переменная" в любом месте книги (без ответов) или в Интернете.

Кто-нибудь знает значение этого термина?

4b9b3361

Ответ 1

Это синоним "переменной экземпляра":

class A {
    static int m;  // <-- class variable
    int n;         // <-- instance variable
    ...
}

Очевидно, этот термин не так часто используется, и лучше избегать любых потенциальных двусмысленностей, просто придерживаясь "переменной экземпляра".

Ответ 2

Я буду кусать.

Объект - это сам экземпляр, тогда как Object Variable - это ссылка на Object.

Вот надуманный пример:

Object o = new Object();
Object ref1 = o;

В его случае есть один экземпляр объекта, но на него ссылаются две переменные Object: o и ref1.

Когда объект больше не ссылается на переменную объекта, объект представляет собой сбор мусора.

Ответ 3

TL;DR; МОСФ

Я столкнулся с одним и тем же вопросом в обзоре, проведенном в Cay Horstmann, Big Java, Early Objects (John Wiley and Sons, 2013), 73.

Cay определяет переменную объекта как переменную (тип которой является классом), которая хранит ссылку на ячейку памяти объекта.

    Rectangle box = new Rectangle();
  • - это переменная объекта, в которой хранится ссылка на недавно созданную ячейку памяти объекта Rectangle.

Существуют несколько переменных объекта, которые сохраняют одну и ту же ссылку на ячейку памяти объекта.

    Rectangle box = new Rectangle(5,10,20,30);
    Rectangle box2 = box;

Вызов мутаторного/мутагенного метода (изменяет объект, на который вызывается метод) на любой переменной объекта мутирует (изменяет) объект, поскольку переменные объекта ссылаются на одно и то же место памяти объекта

    box2.translate(15, 25); 
    System.out.println(box.getY()); // 35.0
    System.out.println(box2.getY()); // 35.0

Это немного запутанно, если вы сравниваете определение Cay с информацией из "Учебники Java" и многими другими источниками, но я считаю, что это ответ на ваш вопрос при размещении в контексте книги Cay.

Я предпочитаю эту перспективу = > Место памяти объекта хранится в ссылке на объект (переменная объекта за Cay). Когда я вызываю метод для объекта, я указываю ссылку на объект, за которой следует оператор точки (.), За которым следует имя метода.

    objectReference.method();

Если публичный интерфейс класса позволяет получить доступ к одному или нескольким из его экземпляров объектов-объектов (переменные экземпляра AKA, переменные объекта, переменные-члены класса, свойства или атрибуты... в зависимости от языка программирования и документации), тогда я могу получить доступ к нему, указав ссылку на объект, за которым следует оператор точки (.), а затем имя поля

    objectReference.fieldName;

Почему я предпочитаю это? Я не поклонник использования переменной как существительного слишком много раз; перегруженная семантика пугает мой простой ум.

Ответ 4

@Faaris Cervon: переменные объекта - это переменные, которые не создают какой-либо объект, а относятся к некоторому объекту. exmp: Дата d1 = новая дата();

d1 - объект.

дата d2; d2 не является объектом, и он не ссылается ни на какой объект. Но он может содержать любой объект типа date. d2 = d1;//valid.

следовательно, d2 - это объектная переменная. Важно помнить, что объектные переменные не содержат объектов, а относятся к некоторому объекту.

Ответ 5

Я нашел кое-что, что вам тоже помогло. Существует несколько слов, таких как объект, объектная переменная и ссылка на объект.

Объектная переменная и ссылка на объект аналогичны тем, что объектная переменная хранит ссылку на объект, где в качестве ссылки на объект описывает местоположение объекта. (Вы можете быть здесь смущены, поэтому просто считайте их такими же)

рассмотрим пример::

Класс автомобиля {
....
....
}

Автомобиль AudiQ7;//S1
Автомобиль AudiQ8 = новый автомобиль();//S2

Здесь в S1 мы создали только объект. Это означает, что он не относится к памяти.

В S2 мы создали объектную переменную/ссылку, ссылающуюся на ячейку памяти.