Przekazywanie przez wartość w Javie
Poznają Państwo przekazywanie przez wartość w Javie: typy prymitywne a referencje, ponowne przypisanie a mutację, a także pułapki związane z tablicami i niezmiennością.
Przekazywanie przez wartość w Javie to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 3 lekcji w sumie.
Przegląd przekazywania przez wartość
Cel: Poznać sposób przekazywania parametrów w Javie. Porównane zostaną typy proste i referencje, ponowne przypisanie i modyfikowanie, tablice oraz niezmienność.
Kopiowanie typów prostych
Typy proste są przekazywane przez wartość, więc metoda wywoływana otrzymuje kopię. Ponowne przypisanie parametru nie zmienia zmiennej wywołującego.
public class Main {
static void inc(int x) {
x = x + 1; // modifies the local copy only
}
public static void main(String[] args) {
int a = 5;
inc(a);
System.out.println("a after inc(a) = " + a); // still 5
}
}
Referencje: modyfikowanie a przypisywanie
W przypadku obiektów kopiowana jest referencja. Modyfikowanie obiektu za jej pośrednictwem wpływa na obiekt wywołującego, ale ponowne przypisanie parametru nie wpływa na zmienną wywołującego.
public class Main {
static class Box { int n; }
static void setTo999(Box b) { b.n = 999; } // mutate via copied reference
static void reassign(Box b) { b = new Box(); b.n = 123; } // reassign local copy only
public static void main(String[] args) {
Box bx = new Box();
bx.n = 10;
setTo999(bx);
System.out.println("after setTo999: bx.n = " + bx.n); // 999
reassign(bx);
System.out.println("after reassign: bx.n = " + bx.n); // still 999
}
}
Tablice: modyfikowanie a przypisywanie
Tablice są obiektami. Ich modyfikowanie wpływa na obiekt wywołującego, ale ponowne przypisanie parametru nie zastępuje tablicy wywołującego.
public class Main {
static void fillZero(int[] a) {
for (int i = 0; i < a.length; i = i + 1) a[i] = 0; // mutate caller array
}
static void replace(int[] a) {
a = new int[] {9, 9, 9}; // reassign local copy of the reference
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fillZero(arr);
System.out.println("after fillZero: " + arr[0] + "," + arr[1] + "," + arr[2]); // 0,0,0
replace(arr);
System.out.println("after replace: " + arr[0] + "," + arr[1] + "," + arr[2]); // still 0,0,0
}
}
Niemutowalne a mutowalne
String jest niemutowalny, czyli zwraca nowe obiekty, natomiast StringBuilder jest mutowalny i zmienia tę samą instancję.
public class Main {
static void tryChangeString(String s) {
s = s + "!"; // new String; original unchanged
}
static void changeBuilder(StringBuilder sb) {
sb.append("!"); // mutates same object
}
public static void main(String[] args) {
String s = "hi";
tryChangeString(s);
System.out.println("after tryChangeString: " + s); // "hi"
StringBuilder sb = new StringBuilder("hi");
changeBuilder(sb);
System.out.println("after changeBuilder: " + sb.toString()); // "hi!"
}
}
Poprawna zamiana
Ponieważ parametry są kopiami, zamiana typów prostych wewnątrz metody nie wpływa na wywołującego. Należy zwrócić nowe wartości lub użyć obiektu przechowującego wartości.
public class Main {
static void trySwap(int a, int b) {
int t = a; a = b; b = t; // swaps local copies only
}
static int[] swap(int a, int b) {
return new int[] { b, a }; // return results to the caller
}
public static void main(String[] args) {
int x = 1, y = 2;
trySwap(x, y);
System.out.println("after trySwap: x=" + x + ", y=" + y); // 1,2
int[] res = swap(x, y);
x = res[0]; y = res[1];
System.out.println("after swap: x=" + x + ", y=" + y); // 2,1
}
}
Sprawdzenie przekazywania przez wartość
Szybkie sprawdzenie: Które stwierdzenie dotyczące przekazywania parametrów w Javie jest prawidłowe?
Podsumowanie i następny krok
Podsumowanie: Poznano typy proste i referencje, modyfikowanie i ponowne przypisywanie, tablice jako obiekty, niezmienność oraz bezpieczny wzorzec zamiany. Następnie omówione zostaną metody statyczne i metody instancji.
Często zadawane pytania
Czy lekcja „Przekazywanie przez wartość w Javie” jest bezpłatna?
Tak — pełny tekst „Przekazywanie przez wartość w Javie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Przekazywanie przez wartość w Javie”?
Poznają Państwo przekazywanie przez wartość w Javie: typy prymitywne a referencje, ponowne przypisanie a mutację, a także pułapki związane z tablicami i niezmiennością. Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Przekazywanie przez wartość w Javie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przekazywanie przez wartość w Javie
- Metody statyczne a instancji
- Dekompozycja metod i czysty kod