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;
È stato utile?

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 il a variabile è un campo, accessibile da tutti i metodi della classe.
  • In Class2 questo non è il caso: a è una variabile locale all'interno del metodo assign. Al termine assign, il valore di a 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top