Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    143

    [Dichirazione variabili] null: metterlo o no?

    Ciao a tutti, mi è venuto un dubbio che volevo condividere con voi. Fra i molti esempi di codice che trovo in rete noto spesso una differenza nella tecnica utilizzata per dichiarare le variabili.

    Ve la mostro

    codice:
    public Classe 
    {
        Classe_2 variabile = null; <-- a volte trovo questa dichiarazione 
        Classe_2 variabile; <-- mentre altre volte trovo questa 
    
        public Classe()
        {       
             variabile = new Classe_2();
        }
    }
    Volevo chiervi se fra i due metodi c'è differenza e se una è migliore dell'altra.

    Ciao

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

    Re: [Dichirazione variabili] null: metterlo o no?

    Originariamente inviato da alesdario
    Volevo chiervi se fra i due metodi c'è differenza e se una è migliore dell'altra.
    Variabili di "istanza" e variabili di "classe" vengono sempre inizializzate subito, come minimo, al loro valore di "default" (0 per i valori numerici/char, false per boolean, null per i reference). Se poi c'è una inizializzazione esplicita, ok viene poi eseguita.

    Quindi mettere ad esempio una variabile di "istanza":

    private String str = null;

    sarebbe tecnicamente del tutto superfluo inizializzarla esplicitamente a null, in quanto lo è già per default.

    E tra fare:
    codice:
    public Classe {
        Obj o = new Obj();
    }
    oppure
    codice:
    public Classe {
        Obj o;
    
        public Classe() {
            o = new Obj();
        }
    }
    Non cambia praticamente nulla. Se non il fatto che nel primo caso la inizializzazione viene eseguita indipendentemente da quanti costruttori ci sono e da quale viene poi invocato.
    Se invece la inizializzazione della variabile dipendesse da quale costruttore (se più di uno) è invocato o da parametri del costruttore, chiaramente andrebbe fatta nel costruttore (secondo caso).

    La cosa che deve essere chiara è: le variabili di classe/istanza sono sempre come minimo al loro valore di default.
    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 L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Giustissimo quello che ha scritto andbin, anche se io non lo chiamassi il valore di default ma solo che le variabili vengono inizializzate con zero (come memset() su C), che - com'è già stato scritto - per i tipi primitivi ovviamente significhi proprio 0 oppure false e per gli oggetti null.

    Però riguarda solo le variabili d'istanze o classi, non quelle dei metodi che devono essere sempre inizializzate.


    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    143
    grazie mille, spiegazione perfetta

  5. #5
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568

    Re: Re: [Dichirazione variabili] null: metterlo o no?

    Originariamente inviato da andbin
    Variabili di "istanza" e variabili di "classe" vengono sempre inizializzate subito, come minimo, al loro valore di "default" (0 per i valori numerici/char, false per boolean, null per i reference). Se poi c'è una inizializzazione esplicita, ok viene poi eseguita.

    Quindi mettere ad esempio una variabile di "istanza":

    private String str = null;

    sarebbe tecnicamente del tutto superfluo inizializzarla esplicitamente a null, in quanto lo è già per default.
    mhhh... non è proprio proprio preciso..
    cambia a livello del compilatore... è una differenza sottile sottile ma giusto per..
    se non inizializzi la variabile nemmeno a null e cerchi di usarla il compilatore ti segna subito un errore..
    se invece inizializzi almeno null e cerchi di usarla funziona..
    il caso specifico in cui potrebbe capitare è questo..

    codice:
    private void esempio(int n)
    String str = null;
    if(n==1){
       str = "N vale 1";
    }
    if(str != null){
       System.out.println("String null");
    }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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

    Re: Re: Re: [Dichirazione variabili] null: metterlo o no?

    Originariamente inviato da morphy79
    mhhh... non è proprio proprio preciso..
    No

    Originariamente inviato da morphy79
    cambia a livello del compilatore...
    No

    Originariamente inviato da morphy79
    è una differenza sottile sottile
    No

    Originariamente inviato da morphy79
    se non inizializzi la variabile nemmeno a null e cerchi di usarla il compilatore ti segna subito un errore..
    Se fosse locale sì, sarebbe assolutamente corretto quanto dici ... altrimenti per variabili di classe/istanza no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568

    Re: Re: Re: Re: [Dichirazione variabili] null: metterlo o no?

    Originariamente inviato da andbin
    No

    No

    No

    Se fosse locale sì, sarebbe assolutamente corretto quanto dici ... altrimenti per variabili di classe/istanza no.
    ops !!!
    io avevo inteso proprio le locali !!!
    letto sbagliato sorry
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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.