Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Domanda su programmazione ad oggetti

    Scusate il titolo, ma non ho veramente idea di che titolo dare.
    Visto che mi sembrava un argomento strettamente legato alle basi della OOP (creazioni di classi ecc...) l'ho chiamato così il thread.

    La domanda.
    Ho creato la classe Pila; dopodiché ho istanziato un oggetto Pila, successivamente ne ho dichiarato un secondo e gli ho assegnato il valore del primo, in questo modo:

    Pila a = new Pila();
    Pila b = a;

    Perché intervenendo su b modifico anche a?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Domanda su programmazione ad oggetti

    Originariamente inviato da Kaamos
    Pila a = new Pila();
    Pila b = a;

    Perché intervenendo su b modifico anche a?
    Perché l'assegnamento copia solo il riferimento (non fa una copia dell'oggetto!) Qui hai solo 1 oggetto, prima referenziato solo da a e poi anche da b.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Re: Domanda su programmazione ad oggetti

    Originariamente inviato da andbin
    Perché l'assegnamento copia solo il riferimento (non fa una copia dell'oggetto!) Qui hai solo 1 oggetto, prima referenziato solo da a e poi anche da b.
    Supponevo si trattasse di riferimenti ma non avevo mai affrontato l'argomento in Java, solo in C++.
    Grazie, se ho altri problemi riscrivo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Leggendo online mi sembra di capire che, al momento dell'assegnazione, i tipi primitivi di dati sono passati per valore mentre gli oggetti (istanze delle classi) per riferimento.

    Però ad esempio le stringhe (oggetti della classe String) sono passate per valore. Come so quando il contenuto di un oggetto lo posso passare per valore o meno?

    Grazie.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Kaamos
    Leggendo online mi sembra di capire che, al momento dell'assegnazione, i tipi primitivi di dati sono passati per valore mentre gli oggetti (istanze delle classi) per riferimento.
    No, concettualmente tutto è sempre passato per "valore". Anche il riferimento è un "valore" (che per il programmatore Java è qualcosa di "opaco", che ha senso solo per la JVM).
    L'assegnamento/passaggio di reference, in effetti quindi copia il valore del reference. Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da andbin
    No, concettualmente tutto è sempre passato per "valore". Anche il riferimento è un "valore" (che per il programmatore Java è qualcosa di "opaco", che ha senso solo per la JVM).
    L'assegnamento/passaggio di reference, in effetti quindi copia il valore del reference. Tutto qui.
    Ok ma quale è la differenza per esempio fra la classe String e una da me creata, che fa sì che questo codice:

    codice:
    Classe oggetto1 = new Classe();
    [...]
    Classe oggetto2 = oggetto1;
    mi generi due dati distinti modificabili per conto loro o (nella pratica) un solo dato?

    Scusa se non ho capito la tua risposta ma è un po' troppo "astratta" per le mie competenze attuali.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non c'è alcuna differenza fra la classe String e una qualunque tua classe.
    L'unico "cavillo" è che la classe String (come altre classi del framework, ad esempio Integer, Long, Locale, ecc) è immutabile: un oggetto String non può essere mai modificato. Anche tu puoi creare classi immutabili (cerca informazioni sul modificatore final).

    Con il codice da te riportato, valido per qualunque tipo di oggetto, l'unico risultato che ottieni è di avere due variabili (due riferimenti) che puntano allo stesso oggetto.

    Se vuoi avere due oggetti distinti, devi usare l'operatore new.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da LeleFT
    Non c'è alcuna differenza fra la classe String e una qualunque tua classe.
    L'unico "cavillo" è che la classe String (come altre classi del framework, ad esempio Integer, Long, Locale, ecc) è immutabile: un oggetto String non può essere mai modificato. Anche tu puoi creare classi immutabili (cerca informazioni sul modificatore final).

    Con il codice da te riportato, valido per qualunque tipo di oggetto, l'unico risultato che ottieni è di avere due variabili (due riferimenti) che puntano allo stesso oggetto.

    Se vuoi avere due oggetti distinti, devi usare l'operatore new.


    Ciao.
    Capisco, farò una prova grazie

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.