Zakres w javie

0

Na pewno prosta rzecz, ale potrzebowałbym pomocy.

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

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.

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.

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