Привет,
Точно така – int е примитивен неизменен тип, на който се задава някаква стойност и обикновено се разпределя от stack-а, докато обектите като Integer осигуряват наличието на полиморфизъм и се задават с референции (или по-точно имат референции, подадени с помощта на някакви стойности), и се складират в хийпа (heap).
Полиморфизъм – свойството на обектите от един и същи тип да имат един и същи интерфейс, но с различна реализация на този интерфейс .
Нещата за примитивни и обекти се обясняват в книжките за програмиране заедно с алокацията на място за елементите – stack & heap.
Добре е да се знае какво е стак (stack) и какво е heap (хийп) . Стака и Хийпа имат по 2 значения –като структура от данни и като организация на паметта.
Като организация на паметта стека е обособена част от паметта, използвана за предаване на параметри и съхранение на локалното състояние при call-ване (извикване) на подпрограма. В зависимост от платформата, стека може да е предварително определен като големина и/или местоположение или да се определя динамично по време на изпълнение на програмата.
Стек като структура от данни
Kак работи самия стак: представи си купчина от елементи да кажем тетрадки, които са 1 върху друга. Има 2 действия, който могат да се извършват – push и pop. Push слага 1 тетрадка над най-горната, а pop маха последно добавената тетрадка, която не е махната все още. Има алтернативно име – LIFO (last in, first out), тоест последния добавен се маха първи; има и peek (надничане) – дава ти възможността да видиш стойността на последно добавеният елемент ... но това е друг въпрос. Също така когато се напълни 1 такъв стак и няма място за повече елементи, се казва stack-а се е overflow-нал , тоест е препълнен.
Та, понеже работи на принципа last in, first out, алокацията (разпределнието) на паметта е много проста и обикновено по-бърза от тази на хийпа, която сега ще спомена.
Хийп като структура от данни е дървовидна структура от данни, съхраняваща подредени елементи, които изпълняват условието, че всеки възел е по-голям или равен на кой да е от наследниците си.
Хиип като организация на паметта е обособена част от паметта, от която се заделят блокове памет по време на изпълнението на програмата (т.нар. динамична памет).
Ако искаш напиши в гугъл “stack” и после “heap” да видиш нагледно, че представляват точно това и да можеш по-лесно да го осмислиш.
Така след като минахме теоретичната част, малко код нагледно:
Като създадеш обект “i” от Integer:
Integer i = new Integer(1);
Можеш да извикаш метод на i:
String string = i.toString(); //задава на string i под формата на стринг
Докато на int като си направиш
int i = 1;
Не можеш да викаш никакви методи, понеже си е просто примитивна =>
String string = i.toString(); // няма как да работи
и ти дава грешка, понеже int не е обект.
Ще обясня и по друг начин:
Спомена че класовете са wrappers – тоест енкапсулират числото (примитивния тип данна), а самите те не са примитивни.
byte, int, char, boolean, double, float, short, long – примитивни;
Byte, Integer, Character, Boolean, Double, Float, Short, Long – wrapper класове – служат за енкапсулация на примитивните, така че тези типове да могат да се използват за създаване на обекти (инстанции) и методи в други класове, които се нуждаят от тези типове.