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

    [JAVA] Teoria: condivisione di un oggetto

    Ciao a tutti!

    Sto tentando di capire questo concetto:
    Si noti ancora una volta che le operazioni su variabili di tipo oggetto sono operazioni su riferimenti, non sugli oggetti stessi. Quindi, ad esempio, l'effetto del comando:
    codice:
          Student std2 = std1; //oggetto con 3 variabili nome, cognome, matricola.
    non è la creazione di una copia dell'oggetto, ma la sua condivisione.
    Secondo voi che intende con "condivisione"?
    Gato

  2. #2
    Che i riferimenti puntano allo stesso oggetto...e quindi std1 e std2 puntano alle stesse informazioni.

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    ti faccio un esempio
    codice:
       Student std1=new Student();
       std1.nome="Pinco";
       System.out.println(std1.nome);//Outout Pinco
       Student std2 = std1;
       std2.nome="Pallino";
       System.out.println(std2.nome);//Outout Pallino
       System.out.println(std1.nome);//Outout Pallino
    std1 e std2 sono 2 riferimenti alla stessa istanza

  4. #4
    Ah, quindi condividono lo stesso oggetto, se non sbaglio a capire...
    Ma a cosa può servire avere due riferimenti alla stessa istanza?
    Gato

  5. #5
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    che puoi mettere un riferimento in un pezzo di codice e uno allo stesso oggetto in un altro. Sarebbe bruttino se una volta definito un oggetto in un metodo o in una classe, quell'oggetto fosse utilizzabile solo dentro quel metodo o quella classe...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  6. #6
    Aah, ok, ora è più chiaro grazie!
    Gato

  7. #7
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    hai capito bene. Per fare una copia dell'oggetto invece devi usare il metodo clone()

    Esempio
    codice:
    public class MiaClasse implements Cloneable{
    	
    	public String nome;
    
    	/**
    	 * @param args
    	 * @throws CloneNotSupportedException 
    	 * @throws Exception 
    	 */
    	public static void main(String[] args) throws CloneNotSupportedException {
    		MiaClasse miaClasse=new MiaClasse();
    		miaClasse.nome="Pippo";
    		System.out.println(miaClasse.nome);//Output Pippo
    		
    		MiaClasse altra=miaClasse;
    		altra.nome="Paperino";
    		System.out.println(miaClasse.nome);//Output Paperino
    		System.out.println(altra.nome);//Output Paperino
    		// TODO Auto-generated method stub
    		
    		
    		////////// METODO CLONE
    		
    		altra=(MiaClasse)miaClasse.clone();//copio
    		altra.nome="Topolino";//modifico la copia
    		System.out.println(miaClasse.nome);//Output Paperino
    		System.out.println(altra.nome);//Output Topolino
    
    	}
    
    }

  8. #8
    Utente di HTML.it L'avatar di puccio
    Registrato dal
    Mar 2006
    Messaggi
    39
    Cerca di capire bene il concetto di cui stiamo parlando perchè è fondamentale. Nel passaggio di parametri succede la stessa cosa:

    - se il parametro è di tipo primitivo si passa per valore e quindi ne viene fatta una COPIA esatta!
    - se il parametro è un oggetto viene passata la copia del RIFERIMENTO e non di tutto l'oggetto!

    esempio:

    public void metodo1(){
    Oggetto ogg = new Oggetto();
    metodo2(ogg);
    ogg.AggiungiElemento("a");
    //fine
    }

    public void metodo2(Oggetto o){
    o.AggiungiElemento("b");
    }

    Alla fine troverai nell'oggetto sia "b" che "a". Questo proprio per il fatto che "o" è una copia di "ogg" (che sono due riferimenti allo stesso oggetto...immaginatele pure come due frecce che puntano allo stesso scatolotto).

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    se vogliamo essere precisi il passaggio dei parametri è SEMPRE per valore (quello della variabile) che nel caso del tipo primitivo è un valore direttamente a te comprensibile (es 10) nel caso del tipo complesso (oggetto) è il riferimento all'oggetto (quello che vedi quando non fai l'override del toString() e stampi la variabile a video)

  10. #10
    Utente di HTML.it L'avatar di puccio
    Registrato dal
    Mar 2006
    Messaggi
    39
    Si, esatto...in pratica nel caso di un oggetto si passa il VALORE del riferimento a quell'oggetto.

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.