Wszystkie obiekty w Javie znajdują się na stercie. Nie jestem do końca pewien, co masz na myśli przez "obiekty dostępu z kupy". Jedyne rzeczy przechowywane na stosie to lista funkcji, które wywołały bieżący kontekst oraz ich lokalne zmienne i parametry. Wszystkie zmienne lokalne i parametry są typami pierwotnymi lub referencjami.
Jeśli przydzielisz obiekt przy użyciu new
(który jest jedynym sposobem przydzielania typów niepochodzących), tak, że obejmuje to typy tablic), obiekt jest przydzielany do sterty, a odniesienie do tego obiektu jest przechowywane stos lub stertę, w zależności od tego, czy odniesienie jest przechowywane w zmiennej lokalnej/parametrze lub jako element innego obiektu.
Po przekazaniu parametrów do funkcji wszystkie obiekty są przekazywane przez odniesienie - jeśli funkcja modyfikuje parametr, oryginalny obiekt jest również modyfikowany. Identycznie można również powiedzieć, że odniesienia do obiektu są przekazywane przez wartość - jeśli zmienisz parametr, aby odnosił się do nowego obiektu, będzie on nadal odnosił się do tego obiektu przez czas trwania funkcji, ale do oryginalnego obiektu, który został przekazany nadal będzie odnosić się do tego, o czym wcześniej wspomniało. Typy prymitywne są również przekazywane przez wartość.
Dobre pytanie - chciałbym wiedzieć więcej o java; dobra odpowiedź na to będzie początkiem mojego oświecenia :) –