Когда значение сохраняется в памяти, я понимаю, что само значение сохраняется в памяти, но когда дело доходит до объектов, как оно хранится в памяти?
Ниже приведена хорошая идея о том, как объекты хранятся в памяти:
Большинство объектов содержат все свои свойства в одном блоке памяти ("a" и "b"). Все блоки памяти имеют указатель на карту, которая описывает их структуру. Именованные свойства, которые не помещаются в объект, обычно хранятся в массиве переполнения ("c" и "d"). Нумерованные свойства хранятся отдельно, обычно в смежном массиве.
Подробнее читайте здесь.
Значения переменных-членов класса хранятся в памяти. Эти значения, как группа, связаны с блоком кода, который является классом, из которого был создан объект. Объектом являются просто данные, связанные с определенным набором вызовов функций, предназначенных для работы на нем.
Рассмотрим язык, основанный на функции, например C. Вы можете сделать что-то подобное.
struct Square (
int upperX;
int upperY;
int lowerX;
int lowerY;
}
Ясно, что мы храним здесь квадрат в памяти...
Square s = malloc (sizeof(Square) );
s->upperX = 10;
s->upperY = 10;
s->lowerX = 20;
s->lowerY = 20;
Вот какой код, который работает на площади... Требуется блок
памяти, которая является структурой Square...
функция drawSquare (Square s) {.. код для рисования}
Квадрат явно хранится в памяти с его значениями.
Теперь объектно-ориентированный язык, такой как C++ или Java, играет за кулисами, что делает то же самое. Но код больше похож на этот...
class Square {
private int upperX;
private int upperY;
private int lowerX;
private int lowerY;
// Create and return an object
public Square (int x1, int y1, int x2, int y2) {code to set members}
// Draw a square
public draw () {code to draw...}
}
И ты делаешь это так...
Площадь s = новая площадь (10,10,20,20);
Где-то за кулисами выполняется malloc и задания. Но s - объект в этом случае, потому что реализованная квадратная "структура" в памяти связана с кодом в классе Square.