Примитивные типы данных хранятся в стеке , а эталонные типы данных хранятся в куче .
Поэтому, когда вы говорите int number=3;
, 32-бит длинный (по умолчанию) кусок памяти в стеке откладывается. Этот блок содержит значение 3 и может быть идентифицирован по имени переменной число .
Но когда вы говорите Integer object = new Integer(3);
, память назначается из кучи и ссылки создан для этого куска памяти. Эта память предназначена для экземпляра object
класса Integer
, поэтому она получает больше памяти, чем ваш int number
. Это связано с тем, что класс Integer
включает в себя не только примитив int , но также некоторые другие методы, которые можно использовать в его экземплярах.
Вы также должны понимать, что при передачепримитивный тип данных для оператора присваивания или для функции, он передается копией , поэтому изменения не отражаются на исходной переменной. Но если вы передаете объект Integer, он передается по ссылке , то есть по указателю на этот большой кусок памяти в куче, поэтому изменения видны на реальном объекте.