Não entendi essa atribuição [Resolvido]

Galera,
Não consegui entender essa atribuição:

public class Main4 {
	public static void main(String[] args) {
		int []arr = {1,2,3,4};
		for ( int i : arr )
		{
		   arr[i] = 0;
		}
		for ( int i : arr )
		{
		   System.out.print(i);
		}
	}

}
//SAIDA = 0030

Porque não está zerando tudo?

outra coisa, apesar de ser uma questão de simulado para prova de certificação, fiquei com dúvida. Devo postar isso no fórum “Java Básico” ou aqui mesmo?
Valeu.

O primeiro índice do array é 0, não 1. Esse código provavelmente dá um arrayIndexOutOfBoundsException.

Então Vini,
Esse código compila e executa, sem arrayIndexOutOfBoundsException.
A saída é: 0030

Onde está

se eu trocar por

int []arr = {1,2,4,4}; ai sim , da arrayIndexOutOfBoundsException…

Mas com 3 funciona.
Fiquei confuso.

na primeria passagem i vale 1 (posicao 0) entao ele atribui o valor 0 na posicao 1
ficando assim : {1,0,3,4}

na segunda passagem o i vale 0 (posicao 1) entao ele atribui 0 na posicao 0 ficando assim:
{0,0,3,4}

na terceira passagem o i vale 3 (posicao 2) entao ele atribui o valor 0 na posicao 3 ficando assim: {0,0,3,0}

na quarta passagem o valor de i vale 0 (posicao 3), entao ele atribui o valor 0 na posicao 0 (novamente)

no final ficou assim: {0,0,3,0}

Rode com um debugger:

  1. Na primeira iteração:
    array[1] = 0;

O array fica:
{1,0,3,4}

  1. Na segunda iteração:
    array[0] = 0;

O array fica:
{0,0,3,4}

  1. Na terceira iteração:
    array[3] = 0;

O array fica:
{0,0,3,0}

  1. Na quarta iteração:
    array[0] = 0;

O array fica:
{0,0,3,0}

E termina seu for.

Dica nº 1 - nunca use o nome “i” dentro de um “foreach”. Ele vai lhe confundir o cérebro completamente. É que o “foreach” do Java é diferente do “foreach” do Javascript (que trabalha com índices em vez de usar os proprios elementos). No seu caso, troque o nome “i” por “x”. Você vai ver que isso já começa a desanuviar seu cérebro.

Dica nº 2 - para entender exatamente o que ocorre, sempre faça a seguinte conversão:

for (int x : array) {
}

==>

for (int i = 0; i < array.length; i++) {
    int x = array[i];
}

Então galera,

Obrigado a todos.
Consegui entender.
O que aconteceu é que comecei a misturar os indice com a interação com os valores do array, aff baguncei tudo hehheh.

Mas agora sim deu para clarear.
Aproveitei e testei tambem pelo debug do eclipse…

Valeu galera.