0Pricing
Java Academy · Lezione

Passaggio per valore in Java

Comprendere il passaggio per valore di Java: primitivi e riferimenti, riassegnazione e mutazione, array e problemi legati all’immutabilità.

Passaggio per valore in Java è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 3 lezioni in totale.

Panoramica del passaggio per valore

Obiettivo: imparare come Java passa i parametri. Confronterà primitivi e riferimenti, riassegnazione e mutazione, array e immutabilità.

Copia dei primitivi

I primitivi vengono passati per valore: il metodo chiamato riceve una copia. Riassegnare il parametro non modifica la variabile del chiamante.

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
  }
}

Riferimenti: mutare o riassegnare

Per gli oggetti viene copiato il riferimento. Modificare l'oggetto attraverso il riferimento influisce sull'oggetto del chiamante; riassegnare il parametro non lo modifica.

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
  }
}

Array: mutare o riassegnare

Gli array sono oggetti. Li modifichi per influire sull'array del chiamante; riassegnare il parametro non sostituisce l'array del chiamante.

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
  }
}

Immutabile e mutabile

String è immutabile e restituisce nuovi oggetti; StringBuilder è mutabile e modifica la stessa istanza.

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!"
  }
}

Scambio corretto

Poiché i parametri sono copie, scambiare primitivi all'interno di un metodo non influisce sul chiamante. Restituisca nuovi valori oppure un oggetto contenitore.

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
  }
}

Verifica del passaggio per valore

Verifica rapida: quale affermazione sul passaggio dei parametri in Java è corretta?

Riepilogo e prossimo passo

Riepilogo: Ha visto la differenza tra primitivi e riferimenti, mutazione e riassegnazione, gli array come oggetti, l'immutabilità e un modello sicuro per lo scambio. Prossimo passo: metodi statici e di istanza.

Domande Frequenti

La lezione «Passaggio per valore in Java» è gratuita?

Sì — il testo completo di «Passaggio per valore in Java» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 3 lezioni in totale.

Cosa imparerò in «Passaggio per valore in Java»?

Comprendere il passaggio per valore di Java: primitivi e riferimenti, riassegnazione e mutazione, array e problemi legati all’immutabilità. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «Passaggio per valore in Java»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Passaggio per valore in Java
  2. Metodi statici e di istanza
  3. Scomposizione dei metodi e codice pulito
← Torna a Java Academy