Domanda
A cura questa domanda perché dei miei cattivi esempi .. Ecco la mia domanda aggiornato:
Può la seguente pari nell'allocazione delle velocità e della memoria:
int b;
for (int i = 0; i < 1000; i++)
b = i;
e
for (int i = 0; i < 1000; i++)
int b = i;
Soluzione
No, non lo farei.
Nel primo caso hai un essere variabile assegnata 1000 valori differenti -. E si finisce per essere in grado di entrare in possesso di l'ultimo valore (999) dopo il costruttore ha completato
Nel secondo caso si sta chiamando un metodo essenzialmente no-op 1000 volte. Il secondo metodo ha effetti collaterali e non ha alcun valore di ritorno, quindi è inutile. La variabile locale "esiste" soltanto per la durata della chiamata metodo, mentre la variabile di istanza nel primo esempio è parte dell'oggetto, così vivrà.
Si noti che questo non è limitato alle primitive - qualsiasi altro tipo si comporterebbe allo stesso modo anche
.Altri suggerimenti
- Sì. Entrambi sono totalmente inutili.
- Nessun. dimensione istanza di Class1 è maggiore della dimensione di Class2 esempio, a causa della variabile utente.
La risposta dipende da cosa si intende dicendo "uguale" =)
No .
- Nella
Class1
ila
variabile è un campo, accessibile da tutti i metodi della classe. - In
Class2
questo non è il caso:a
è una variabile locale all'interno del metodoassign
. Al termineassign
, il valore dia
viene scartato.
No, si ha un'istanza a
variabile (Class1), e uno non ha.
Nel primo caso si è già dichiarato b come un int e il suo valore viene aggiornato ogni volta che il ciclo viene eseguito. Nel secondo, b è dichiarata e inizializzata al valore dei ogni volta che il ciclo viene eseguito. Io non sono sicuro al 100%, ma credo che il secondo caso è più intensivo di memoria, ma non credo che la differenza di velocità sarebbe evidente.
E 'importante notare che qualsiasi compilatore degno, e io credo fermamente il JIT per valere un sacco di sale, sarebbe solo mettere da parte lo spazio per "b" UNA VOLTA nel secondo caso, vale a dire la fase 'dichiarazione' non avrebbe senso .
Hai provato questo fuori? Non ha nemmeno compilare!
for (int i = 0; i < 1000; i++)
int b = i;
I messaggi di errore del compilatore:
Example.java:4: '.class' expected
int b = i;
^
Example.java:4: not a statement
int b = i;
^
Example.java:4: illegal start of expression
int b = i;
^
Il corpo di un ciclo deve contenere almeno un'istruzione. Una dichiarazione di variabile non è una dichiarazione, quindi un ciclo con solo una dichiarazione di variabile non è valido.