Referencja w javie

Referencja w javie
K8
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:13
0

Witam, dlaczego w poniższym kodzie, po zapisaniu first=third, referencja second nie ulega zmianie, skoro wcześniej second wskazuje na to samo, co first?

Kopiuj
public class Home{
	
int k=3;
 
   public static void main(String[] args){
	   
   Home first=new Home();
   Home second=new Home();
   Home third=new Home();
  
  third.k=8;
		 
		  second=first;
		  
		  first.k=5;
		  
		  System.out.println(first.k);
		  System.out.println(second.k);
		  
		
		  first=third;
		  
		  System.out.println(first.k);
		  System.out.println(second.k);
		  
   }
} 
AK
A nie mylisz słów referencja <-> obiekt ?
K8
first, second, third, to referencje do obiektów klasy Home, po zapisie: second=first -> second i first wskazują na ten sam obiekt, a po zapisie first=third -> first i second wskazują na coś innego (wydaje mi się, że skoro wcześniej second i first wskazywały na to samo, to teraz też powinny)
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 minut
1

first=third w tym momencie first przestaje miec cokolwiek wspolnego ze wszystkim co nie jest obiektem wskazywanym przez third


λλλ
K8
wiem, ale dlaczego w second k będzie równe 5, a nie 8?
stivens
Bo second wskazuje na inny obiekt
K8
tak, na ten sam, co wcześniej first, a moje pytanie - dlaczego po zapisie first=third -> second nie zaczniej wskazywać także na third
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 minut
1

tak, na ten sam, co wcześniej first, a moje pytanie - dlaczego po zapisie first=third -> second nie zaczniej wskazywać także na third

Referencja to zmienna, ktora w olbrzymim skrocie myslowym przechowuje adres gdzie znajduje sie obiekt. Jak zmienisz jedna zmienna (powiedzmy liczbowa) to to nijak nie propaguje sie na inna.


λλλ
edytowany 1x, ostatnio: stivens
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:29 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
3

Bo w Javie referencja to tylko mądrzejsza nazwa na sprytny i gruby wskaźnik z odśmiecaniem pamięci. first, second i third są wskaźnikami wskazującymi na tą samą przestrzeń w pamięci, ale wzajemnie o sobie nic nie wiedzą


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
K8
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 4 lata
  • Postów:13
0

Ok dziękuję, trochę namieszałem, ale już wiem o co chodzi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.