Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Classi wrapper immutabili confusione

    Se le classi wrapper sono immutabili perchè questa istruzione funziona?
    codice:
         */
        public static void main(String[] args) {
             Integer i=new Integer(2);
            i++;
            System.out.println(i);
        }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    conosco l'unboxing ma in questo caso non capisco cosa centra.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quel codice è equivalente a questo:


    codice:
    Integer i = new Integer(2);
    int temp = i.intValue();
    temp++;
    i = Integer.valueOf( temp );
    System.out.println( i );

    Se provi a disassemblare il bytecode, lo vedi.


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    grazie mille !! che significa disassemblare il bytecode? quindi l'immutabilità si verifica soltanto nel passaggio come parametri?
    Ultima modifica di linux_r; 21-07-2014 a 17:24

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    grazie mille !! che significa disassemblare il bytecode?
    Vai al prompt dei comandi, posizionati dove hai il file .class e dai il comando:


    codice:
    javap -c NomeClasse

    Vedrai a video "l'assembly" (vedi qui e più in dettaglio qui) corrispondente al bytecode della classe.


    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    quindi l'immutabilità si verifica soltanto nel passaggio come parametri?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    quindi l'immutabilità si verifica soltanto nel passaggio come parametri?
    ?

    L'immutabilità (di qualunque classe "immutabile") è data dal fatto che la classe in questione (Integer, in questo caso) non possiede alcun metodo che permetta di modificare lo stato interno dell'oggetto: non ci sono metodi setter, né alcun altro metodo che permetta di modificarlo.


    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

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.