public class Teste{
public static void main(String[] args) {
int[] a1 = {1,2,3};
for (final int varfinal : a1)
System.out.println(varfinal);
}
}
Alguém sabe o porque isso não da erro de compilação ???
pelo que eu entendi da resposta do whizlabs … é apenas para que dentro do foreach essa variavel final não receba outro valor.
É +ou- isso que vc colocou… se vc descompilar vc vai ver que ele faz um pouco diferente… a diferença é a variavel final i no for
No codigo que eu mostrei se tentar alterar o valor de i dentro do for vai dar erro de compilação:
public class Teste{
public static void main(String[] args) {
int[] a1 = {1,2,3};
for (final int varfinal : a1) {
varfinal++; // Erro de compilação
System.out.println(varfinal);
}
}
}
e do jeito que vc mostrou não tem problema nenhum se vc alterar o valor do i
for(int i=0;i<a1.length;i++) {
i++; // OK :] Não tem problema alterar o valor do i
System.out.pritln(a1[i]);
}
R
Rodrigo_lmPJ
for(final int varfinal : a1)
Não compila pois a variavel é marcada como FINAL, isto é, não pode alterar seu valor!
G
GPRPJ
for(final int i = 0; i < args.length; i++) {System.out.println(i);}
Testei no eclipse e dá erro de compilação… alguem testou o trecho com outra sintaxe no java 5??
S
sakuraiPJ
Rodrigo_Im … esse foreach com variavel final … compila sim…
GPR
Esse for não compila, porque no final ele quer encrementar com i++ e ele reclama que i é uma variavel final.
for (final int i = 0; i < args.length; i++) {
System.out.println(i);
}
Se vc fizer só assim ele deixa blz, porque o valor de i não vai ser alterado…
for (final int i = 0; i < args.length; ) {
System.out.println(i);
}
J
jaireltonPJ
Não dá erro de compilação porque a variavel só existe no ciclo do loop, seu valor não está sendo alterado e sim criada uma nova variavel e descartada a outra.