Tworzenie zmiennych - jak i gdzie są przechowywane?

0

Cześć,
chciałbym się upewnić czy dobrze rozumiem jak przechowywane są zmienne w javie.

 
int i;  //-> już tutaj rezerwowane jest miejsce w pamięci na int tak?
i=4;  //-> tutaj tylko ustawienie wartości w tym obiekcie

Integer j;  //-> tutaj nie dzieje się jeszcze nic
j=new Integer(2);  //-> tutaj tworzony jest obiekt gdzieś w pamieci, a do j przypisywana jest referencja do tego obiektu. Referencja j jest ustawiana na stercie

//I tak z wszystkimi typami, tak? :)

mam jeszcze dużą wątpliwość między różnicą typów własnych, a nie prymitywnych typów wbudowanych

 
Integer i=new Integer(2);
Integer j=i;

j++;  // j się zwiększy, a i nie.. a dlaczego skoro teoretycznie wskazują na ten sam obiekt więc powinien się zwiększyć..

//a teraz na własnym typie

MyType mt=new MyType(2);

MyType mt2=mt;

mt2.setValue(3);  // teraz jak wypisze wartość obiektu mt to też jest 3 ;)

na czym polega różnica?
Dzięki z góry za wyjaśnienie

1

Integer w Javie jest niezmienny(Immutable). Instrukcja

j++;

robi coś takiego, że tworzy nowy obiekt typu Integer, równy 2+1 i zwraca go przypisując do zmiennej j. Teraz zmienna j i zmienna i wskazują na zupełnie inne miejsca w pamięci.

Co do własnego typu MyType to tutaj obiekty mt i mt2 mają tę samą wartość, czyli referencję do tego samego obiektu. Setując zmienną na 3, nie zmieniamy wartości ani zmiennej mt i mt2, one nadal wskazują na ten sam obiekt. Zmieniamy tylko wartość jednej ze składowych tego obiektu. Więc mt i mt2 wskazują nadal na ten sam obiekt w pamięci.

0

ok, dzięki wielkie :)

Co do układania tego w pamięci to,

*obiekty są układane losowo/w następne wolne miejsce w pamięci (tam gdzie jest miejsce)
*referencje przechowywane na stercie
prawda?

I jeśli po X razach przeprowadzenia odśmiecania, dalej "trzymamy" referencję, to przechodzi ona do innej części sterty "starego pokolenia" prawda?

1 użytkowników online, w tym zalogowanych: 0, gości: 1