Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Legame dei parametri per riferimento

    Salve a tutti,

    Mi sto preprando ad un esame universitario di informatica, e mentre studiavo mi é venuto un dubbio scaricando una classe da internet (ammetto di essere uno sfaticato e non mi andava di crearmente una da solo ). Questa classe, chiamata Randomizer, ha la funzione di mischiare gli elementi di un array (si capiva gia dal nome ). Questa classe é (come prevedibile) unstensione della classe Random.

    Ora teoricamente dalla mia documentazione il java non presenta il legame per riferimento dei paramentri di un metodo, ovvero le variabili passate come parametri non variano ma vengono "COPIATE" e modificate localmente e poi in caso restituite con il return (si parla ovviamente di parametri esterni e non di variabili contenute nell'oggetto della classe).

    Tornando alla classe Randomizer, mi sono trovato davanti un caso che sfugge a questa regola. Vi copio una sintesi di quello che accade:

    Corpo di classe Prova:
    codice:
    public class Prova {
    
    	public void prova(int[] i) {
    		i[0] = 2;
    	}
    
    }
    Corpo del main:
    codice:
    Prova P = new prova();
    int a[] = new int[2];
    a[0] = 0;
    a[1] = 1;
    System.out.println("" + a[0] + a[1]);    //Stampa "01"
    P.prova(a);
    System.out.println("" + a[0] + a[1]);    //Stampa "21"


    Il codice come vedete é dannatamente semplice, ma ora la domanda: perchè la seconda stampa restituisce "21"? non dovrebbe restiturire nuovamente "01"?

    Grazie in anticipo per tutte le vostre risposte

  2. #2
    In Java il passaggio dei parametri avviene sempre per valore.
    Se i parametri appartengono a tipi primitivi, come int, double, ecc. qualsiasi operazione eseguita su di essi nel metodo chiamato non ha perciò effetto sul valore della variabile nel metodo chiamante.
    Nel caso di parametri che siano dei reference (come nel caso di tutti gli oggetti e degli array) ciò che viene passato per valore è il reference (cioè il puntatore), per cui nel metodo chiamato tutte le modifiche sui parametri avranno effetto direttamente sugli oggetti visti dal metodo chiamante.
    Ecco perché le modifiche al tuo array eseguite all'interno del metodo prova() te le ritrovi anche nell'array di partenza.

    Ciao,

  3. #3
    tutto chiaro, sei stato davvero chiarissimo.
    Tutto questo vale anche per le variabili statiche giusto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.