Tranne l'ambito e le differenze di archiviazione, ci sono altre importanti differenze tra istanza e variabili locali in java?Qual è la differenza tra le variabili locali e di istanza in Java
risposta
Una cosa in più che posso pensare:
variabili di istanza sono dati i valori di default, cioè nullo se si tratta di un riferimento a un oggetto, 0 se si tratta di un int.
Le variabili locali non ricevono valori predefiniti e pertanto devono essere inizializzate in modo esplicito (e il compilatore di solito si lamenta se non si riesce a farlo).
No, lo hai praticamente coperto. Una variabile di istanza appartiene a un'istanza di una classe, una variabile locale appartiene a uno stack frame.
Le variabili di istanza sono inizializzate su valori predefiniti, ma in genere è buona norma utilizzare comunque inizializzazioni esplicite.
Le principali differenze che vedo sono nel loro:
Ambito: Le variabili locali sono visibili solo nel metodo o il blocco sono dichiarate, mentre le variabili di istanza possono essere viste da tutti i metodi della classe.
Luogo in cui sono dichiarate: Le variabili locali sono dichiarate all'interno di un metodo o di un blocco, mentre le variabili di istanza all'interno di una classe, ma al di fuori di un metodo.
tempo dell'esistenza: variabili locali vengono create quando viene chiamato un metodo e distrutte quando il metodo termina mentre le variabili di istanza vengono creati utilizzando nuovo e distrutto dal garbage collector quando non ci sono riferimento ad esse.
Accesso: Non è possibile accedere alle variabili locali mentre è possibile accedere alle variabili di istanza se sono dichiarate come pubbliche.
Dove vengono dichiarati: Le variabili locali vengono dichiarate in un metodo o in un blocco prima di essere richiamate, mentre le variabili di istanza possono essere dichiarate ovunque nel livello di classe (anche dopo il loro utilizzo).
EDIT:
E ho dimenticato di dire che le variabili di istanza sempre avere un valore, anche se non è assegnato dal codice (allora dovranno ad esempio nullo, 0, 0.0, false). Per le variabili locali ci deve essere un valore assegnato dal codice, altrimenti il compilatore genera un errore.
Cosa intendi per differenza tra "Scope" e "Existence time" e "Dove vengono dichiarati"? Inoltre, non capisco il significato della sezione "accesso" - cosa significherebbe "accedere" a un locale? – danben
@danben: l'accesso non ha senso per una variabile locale. ecco perché è una differenza dalle variabili di istanza. Sono d'accordo è una differenza banale, ma ancora ...! lo stesso vale per "Dove vengono dichiarati". Per quanto riguarda l'ambito e il tempo di esistenza (o durata), sono termini completamente diversi.E ho anche dimenticato di aggiungere un altro, che modificherò e aggiungerò ora. – Alex
La differenza principale è che le variabili di istanza ottengono valori predefiniti come il valore int get zero char ottiene null ma non le variabili locali. È possibile lasciare una variabile di istanza non inizializzata, ma in cui le variabili locali devono essere inizializzate altrimenti si otterrà l'errore del compilatore.
Un'altra differenza, non devi preoccuparti dell'accesso simultaneo alle variabili locali; mentre lo fai con le variabili di istanza in un ambiente multi-thread.
A prescindere da tutto ciò che è già menzionato qui, vorrei sottolineare che le variabili locali sono un po 'più veloci per accedere alla JVM. La JVM ha più lavoro da fare per leggere o scrivere una variabile di istanza rispetto a una variabile locale.Ciò è ancora vero per il server Hotspot corrente JVM perché non è un problema di ottimizzazione della VM, è piuttosto causato dal fatto che una variabile di istanza è visibile al di fuori del metodo e potrebbe quindi essere accessibile da altri thread mentre il metodo viene eseguito.
Potete fornire riferimenti che dimostrino che ciò è vero? Dubito che abbia letto una variabile locale finale più veloce del campo dell'istanza finale. – user2418306
Le variabili definite all'interno di metodi, costruttori o blocchi sono denominate variabili locali. La variabile verrà dichiarata e inizializzata all'interno del metodo e verrà distrutta al completamento del metodo.
Le variabili di istanza sono variabili all'interno di una classe ma all'esterno di qualsiasi metodo. Queste variabili vengono istanziate quando la classe viene caricata.
Le variabili di istanza vengono create un'istanza quando viene costruita un'istanza della classe. – EJP
variabile locale:
- è dichiarata all'interno di un metodo/costruttore oppure in un blocco (racchiusa tra parentesi)
- deve essere inizializzato prima dell'uso, altrimenti non si compila.
variabile istanza:
- è dichiarata all'interno di una classe.
- inizializzazione non è obbligatoria: se omesso, contiene il valore di default (0, 0,0,
false
,null
, ecc)
parte tutte le differenze sopra menzionate, desidero sottolineare ancora una differenza le variabili di istanza possono avere modificatori di accesso (come privati, pubblici, protetti ecc.), ma le variabili locali non avranno alcun modificatore di accesso.
Le variabili locali sono dichiarate all'interno di un metodo.
Le variabili di istanza sono dichiarate all'interno di una classe ma non all'interno di un metodo.
Le variabili locali non ricevono un valore predefinito. Il compilatore si lamenta se si tenta di utilizzare una variabile locale prima che la variabile venga inizializzata.
Tuttavia, le variabili di istanza ottengono sempre un valore predefinito. Se non si assegna esplicitamente un valore a una variabile di istanza, la variabile di istanza ha ancora un valore.
interi 0
punti galleggianti 0
booleani falsi
riferimenti nulli
- 1. Rubino: Differenza tra istanza e variabili locali in Ruby
- 2. Variabili di istanza Java vs variabili locali
- 3. Qual è la differenza tra le variabili locali auto int a e int a?
- 4. Qual è la differenza tra le variabili di sessione e le variabili globali in php?
- 5. Valori predefiniti di variabili di istanza e variabili locali
- 6. Qual è la differenza tra le azioni di classe e le azioni di istanza in AngularJs?
- 7. Java: qual è la differenza tra le impostazioni locali sv e sv_SE?
- 8. Qual è la differenza tra letterale e variabili in Python?
- 9. Qual è la differenza tra variabili firmate e non firmate?
- 10. Rails - Variabili locali contro variabili di istanza
- 11. Qual è la differenza tra l'interfaccia e @interface in java?
- 12. Qual è la differenza tra Boxing e AutoBoxing in Java?
- 13. Qual è la differenza tra a.getClass() e A.class in Java?
- 14. Qual è la differenza tra Class.questo e questo in Java
- 15. Qual è la differenza tra Future e FutureTask in Java?
- 16. Qual è la differenza tra! = E =! in Java?
- 17. Qual è la differenza tra booleano e booleano in Java?
- 18. Qual è la differenza tra int.class e Integer.TYPE in java?
- 19. Qual è la differenza tra Float e float in java?
- 20. Qual è la differenza tra System.getProperty e properties.getProperty in Java
- 21. Qual è la differenza tra le variabili di bind e la variabile che immetto usando &&?
- 22. Java: qual è la differenza tra autoboxing e casting?
- 23. Java 8: Qual è la differenza tra Instant e LocalDateTime?
- 24. Qual è la differenza tra locali e globali quando si utilizza Eval() di Python?
- 25. PHP: qual è la differenza tra le variabili globali e le costanti
- 26. Qual è la differenza tra la creazione di impostazioni locali per en-US e en_US?
- 27. Qual è la differenza tra $ host e $ http_host in Nginx
- 28. Qual è la differenza tra le variabili globali e # define in c
- 29. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 30. Qual è la differenza tra oggetti e classi in C#?
Dup? http://stackoverflow.com/questions/1794141/java-instance-variables-vs-local-variables –
"tranne le differenze, quali sono le differenze?" :-) Che tipo di differenze stai cercando? ottimizzazioni e durata della vita o qualcos'altro? – Fredrik