Galera, faz um tempo que eu estava conversando com um amigo e uma vez ele me veio com essas afirmações (coloquei exemplo para facilitar)
Exemplo 1:
int a = 0;
for(int e = 0; e < 9999; e++) {
a = e;
}
Exemplo 2:
for(int e = 0; e < 9999; e++) {
int a = e;
}
Primeira afirmação:
Ao usar o exemplo 2, jamais vai ocorrer um erro de falta de memória no Java, pois toda vez que o while acaba a var "a" é excluída junto com seu conteúdo.
Já no exemplo 1, pode ocorrer o erro, pois a variável nunca é excluída. Segundo ele, todos os valores anteriores que a variável possuía também ficam guardados na memória. Ex: se eu tiver na repetição 10 do while:
A var "a" vai ter valor 9 e dentro da memória RAM vão estar guardados os valores 0, 1, 2, 3, 4, 5, 6, 7 e 8 (mesmo que não acessíveis) (eu duvidei disso mas, como não conhecia, não fiquei teimando)
Segunda afirmação:
O exemplo 1 é mais rápido que o 2, pois no 1 o Java só precisa alterar o valor da variável a cada nova repetição do while. No 2 o Java precisa criar a variável, alterar seu valor e excluí-la a cada repetição.
Galera, as duas afirmações estão certas?
OBS: eu sei que a diferença é insignificante, mas gostaria de entender a teoria do funcionamento da JVM. Nas afirmações foi desconsiderada a existência do Garbage Collector.
Obrigado :thumbup: