Duvida foreach

7 respostas
S

Ae pessoal,

encontrei no Whizlabs uma pergunta +ou- assim:

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.

Obrigado.

7 Respostas

C

Se você reparar, isso é uma prova de certificação SCJP do java 5.0, né?
Esse faz a mesma coisa daquele for…

for(int i=0;i<a1.length;i++) System.out.pritln(a1[i]);

OK ?

S

É +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
for (final int varfinal : a1)

Não compila pois a variavel é marcada como FINAL, isto é, não pode alterar seu valor!

G
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

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

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.

O equivalente no for comum seria:

int[] a1 = {1, 2, 3};

for(int i=0;i<a1.length;i++){
   final int varfinal = a1[i];
   System.out.println(varfinal);
}
S

Valeu jairelton,
era +ou- isso que eu estava achando que ele fazia… criar a variavel varfinal em cada interação do for.

Criado 2 de agosto de 2006
Ultima resposta 3 de ago. de 2006
Respostas 7
Participantes 5