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

    aiuto passaggio di parametri (reference)

    ho iniziato a studiare il passaggio di parametri.

    "i parametri di tipo primitivo vengono passati per valore. questo significa che, al momento della chiamata, il valore del parametro attuale viene copiato nel parametro formale. Il risultato è che il parametro formale e il parametro attuale occupano due diverse aree di memoria, pertanto la modifica del contenuto del parametro formale non si riflette sul parametro attuale"

    (in parole semplici?)
    cosa vuol dire e a cosa ci interessa sapere che la modifica del contenuto del parametro formale non si riflette sul parametro attuale?
    mi sembra di intuire che si tratti di come funziona la memoria di java…argomento difficile! (qualcuno saprebbe spiegarmelo con termini più semplici?



    per esempio:

    codice:
    class Animale {
    int cammina (int velocità) {
    velocità = 20;
    }
    }
    
    int speed = 10;
    animale.cammina( speed );

    grazie!

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    in realtà è molto semplice: prendiamo il codice che hai postato tu. Richiami il metodo cammina passando la variabile speed come parametro. Questo parametro "viene visto come" velocità all'interno del metodo (P.S. meglio non usare lettere accentate...). Quindi il metodo prende questa "velocità" (parametro formale) e la setta al valore 20. Cosa è successo alla speed originale? Niente: vale ancora 10! Questo perché al metodo non viene passata la "vera" variabile speed, ma solo una sua copia. Quindi tutte le modifiche fatte dal metodo vengono effettivamente eseguite su una copia, e questo lascia inalterato il valore della variabile passata.

  3. #3
    Ti posto un semplice esempio
    codice:
    public class PassaggioParametri
    {
    	public static class Animale
    	{
    		public int anni;
    
    
    		public Animale(int anni)
    		{
    			this.anni = anni;
    		}
    
    
    	}
    
    
    	public static void passaggioParametri(int value)
    	{
    		value = 50;
    	}
    
    
    	public static void passaggioParametri(Animale animale)
    	{
    		animale.anni = 50;
    	}
    
    
    	public static void main(String[] args)
    	{
    		int anni = 10;
    		System.out.println("MAIN ANNI VALE " + anni);
    		// PASSAGGIO PER VALORE
    		passaggioParametri(anni);
    		System.out.println("MAIN DOPO PASSAGGIO PER VALORE ANNI VALE " + anni);
    
    
    		PassaggioParametri.Animale animale = new PassaggioParametri.Animale(anni);
    		// PASSAGGIO PER REFERENZA
    		System.out.println("MAIN ANIMALE.ANNI VALE " + animale.anni);
    		passaggioParametri(animale);
    		System.out.println("MAIN DOPO PASSAGGIO PER REFERENCE ANIMALE.ANNI VALE " + animale.anni);
    	}
    }
    Secondo te che valori verranno stampati dalle System.out ?

  4. #4
    altra domanda che sorge(cosa serve "this"?) es:

    codice:
    publicAnimale(int anni)
            {
                this.anni = anni;
            }
    
    serve per dire che all' oggetto anni si applica il valore anni (e quindi per non confonderli)?


    non mi è chiaro il seguente pezzo di codice:
    codice:
    publicstaticvoid passaggioParametri(Animale animale)
        {
            animale.anni =50;
        }
    cioè perché scrivi due volte animale (Animale animale)nelle parentsi tonde dopo il metodo passaggioParametri?
    e perché tra le parentesi graffe seguenti scrivi animale.anni = 50; e non semplicemente animale = 50? (da dove deriva il fatto che devi scriverle insieme animale e anni)

    forse indichi prima la classe e dopo il punto il suo attributo?


    per rispondere alla domanda..forse dovrei prima capire queste cose.. a occhio comunque direi che i primi anni passati per valore valgano 10 ...

    i secondi..forse sono indipendenti dalla chiamata del metodo (passaggioParametri (anni)) e se è così direi valgano 10.

    ma se tu volessi attuare il metodo passaggioParametri(anni), e stampare a video il risultato? (cioè 50)

    grazie per l' attenzione che mi date
    Ultima modifica di Filippo11; 21-01-2015 a 16:05

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Purtroppo dalle domande che fai non posso fare a meno di rimandarti ad un buon libro di programmazione.
    Soprattutto la domanda sul perché di "Animale animale" mi fa capire che non hai le idee chiare: "Animale" è il nome della classe, mentre "animale" è una sua istanza, cioè un oggetto della classe "Animale".

  6. #6
    sto seguendo un buon manuale ..a volte faccio fatica..
    comunque grazie
    Ultima modifica di Filippo11; 21-01-2015 a 16:56

  7. #7
    grazie ancora per il codice di esempio..
    i primi due anni valgono 10.
    ho capito che il passaggio di parametri di tipo oggetto avviene per riferimento (cioè il parametro formale punta alla stessa area di memoria puntata dall' oggetto, quindi la modifica)


    cosa significa this?

    programma senza this
    codice:
    • class Student10{
    • int id;
    • String name;
    • student(int id,String name){
    • id = id;
    • name = name;
    • }
    • void display(){System.out.println(id+" "+name);}
    • public static void main(String args[]){
    • Student10 s1 = new Student10(111,"Karan");
    • Student10 s2 = new Student10(321,"Aryan");
    • s1.display();
    • s2.display();
    • }
    • }
    programma con this

    codice:
    • //example of this keyword
    • class Student11{
    • int id;
    • String name;
    • Student11(int id,String name){
    • this.id = id;
    • this.name = name;
    • }
    • void display(){System.out.println(id+" "+name);}
    • public static void main(String args[]){
    • Student11 s1 = new Student11(111,"Karan");
    • Student11 s2 = new Student11(222,"Aryan");
    • s1.display();
    • s2.display();
    • }
    • }
    Ultima modifica di Filippo11; 22-01-2015 a 18:59

Tag per questa discussione

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.