Zakres w javie

KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Na pewno prosta rzecz, ale potrzebowałbym pomocy.

Kopiuj
public class ArrayLocation{
	private double coords;
	
	public ArrayLocation(double coords){
		this.coords = coords;
	}

public static void main(String [] args){
	double coords = 5.0;
	ArrayLocation accra = new ArrayLocation(coords);
	coords = 32.9;
	
	
	System.out.println(accra.coords);
}
}

output: 5.0

Kopiuj
public class ArrayLocation{
	private double coords[];
	
	public ArrayLocation(double [] coords){
		this.coords = coords;
	}


public static void main(String [] args){
	double[] coords = {5.0, 0.0};
	ArrayLocation accra = new ArrayLocation(coords);
	coords[0] = 32.9;
	coords[1] = -117.2;
	
	System.out.println(accra.coords[0]);
}
}

output: 32.9

Przy primitive type rozumiem dlaczego jest taki output.

Jednak mam problem z dokładnym zrozumieniem, gdy zrobimy tablice (2 przykład). Wiem, że tablice to obiekty i to jest pewnie kluczowe, ale nie rozumiem dlaczego. coords[0] na początku przypisuje 5.0, 0.0 i tworze obiekty przy pomocy konstruktora z wartościami 5.0, 0.0. Potem w main przypisuje do coords[0] liczbę 32.9 i wyświetlam accra.coords[0] i pojawia się 32.9, a nie 5.0. Prosiłbym o nakierowanie, lub wytłumaczenie dlaczego tak się dzieje.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Bo wszystko oprócz prymitywów w javie przekazuje się przez "referencje". Prymitywy są kopiowane ale dla obiektów (a tablica jest obiektem) kopiowany jest tak jakby tylko "adres" obiektu, ale cały czas pracujesz na tym samym oryginalnym obiekcie i zmienianie go powoduje faktyczną zmianę oryginalnego obiektu.

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.