0Pricing
Java Academy · Lekcja

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

  1. Przekazywanie przez wartość w Javie
  2. Metody statyczne a instancji
  3. Dekompozycja metod i czysty kod
← Powrót do Java Academy