Modyfikowanie tablicy przekazanej jako parametr metody
Załóżmy, że mam tablicę int i chcę ją zmodyfikować. Wiem, że nie mogę przypisać nowej tablicy do tablicy przekazanej jako parametr:
public static void main(String[] args)
{
int[] temp_array = {1};
method(temp_array);
System.out.println(temp_array[0]);// prints 1
}
public static void method(int[] n)
{
n = new int[]{2};
}
podczas gdy mogę to zmodyfikować:
public static void main(String[] args)
{
int[] temp_array = {1};
method(temp_array);
System.out.println(temp_array[0]);// prints 2
}
public static void method(int[] n)
{
n[0] = 2;
}
Następnie próbowałem przypisać dowolną tablicę do tablicy przekazanej jako parametr za pomocą
clone ():
public static void main(String[] args)
{
int[] temp_array = {1};
method(temp_array);
System.out.println(temp_array[0]);// prints 1 ?!
}
public static void method(int[] n)
{
int[] temp = new int[]{2};
n = temp.clone();
}
Teraz zastanawiam się, dlaczego w ostatnim przykładzie wypisuje 1, podczas gdy po prostu kopiuję tablicę za pomocą
clone (), która po prostu kopiuje wartość, a nie referencję. Czy mógłbyś mi to wyjaśnić?
EDIT:
czy istnieje sposób na skopiowanie tablicy do obiektu bez zmiany odniesienia? Mam zamiar zrobić ostatni przykład drukowania
2.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
public static void method(int[] n)
to inna nazwa tablicy przekazanej w ten sposób. Wskazuje na to samo miejsce w pamięci, co oryginał, czyli tablicę liczb całkowitych. Jeśli zmienisz jedną z wartości przechowywanych w tej tablicy, wszystkie nazwy wskazujące na nią zobaczą zmianę.
Jednak w samej metodzie
Tworzysz nową tablicę, a następnie mówisz: „nazwa 'n' wskazuje teraz na tę drugą tablicę, a nie tę, która została przekazana”. Zasadniczo nazwa „n” nie jest już nazwą przekazanej tablicy.
Anonimowy użytkownik
Potwierdzenie od:
Fakt, że sklonowałeś tablicę nie ma znaczenia - wszystko, co zrobił, to utworzenie kopii , a następnie przypisanie jej do . ..
Aby skopiować wartości do tablicy przekazanej do Twojej , możesz spojrzeć na:
System.arraycopy
http://download.oracle.com/jav ... bject,%20int,%20java.lang.Object,%20int,%20int%29
To wszystko oczywiście zależy od rozmiaru tablicy i tej, którą utworzysz w ramach .
Załóżmy, że oba mają tę samą długość, na przykład zrobiłbyś to w ten sposób:
Anonimowy użytkownik
Potwierdzenie od:
To najlepsza rzecz, jaką możesz zrobić:
Oczywiście działa to poprawnie tylko wtedy, gdy rozmiar tablicy wejściowej jest taki sam, jak rozmiar tablicy, do której kopiujesz. (Sposób, w jaki należy sobie z tym poradzić, zależy od konkretnej aplikacji ...)
Podczas pisania Java przekazuje referencję do tablicy według wartości. Nie przekazuje zawartości tablicy według wartości. A klon nie pomoże rozwiązać tego problemu. (Przynajmniej nie z zadeklarowaną sygnaturą metody).
Anonimowy użytkownik
Potwierdzenie od: