Ok. Valeu a resposta pessoal, mais eu sei o que aconteceu com os valores.
O que eu quero saber é o por que isso acontece.
Quando operadores (menos os de atribuição) aparecem na expressão eles são avaliados da esquerda para direita.
E os operadores de atribuição são avaliados da direita para esquerda.
sendo assim, por essa lógica (que nem tenho certeza se está correta):
expressão inteira
1º a expressao da direita, temos:
x = 100; //a váriável x, que antes era 0, agora recebe o valor 100
2º atribuição
array[x] = x; //o elemento do array no indice x (que seria 100 á essa altura, devida a 1º atribuição) recebe o valor 100.
Pela lógica de atribuição, da direita para esquerda, a 2º atribuição resultaria em uma Exception
Acho que minha duvida ficou mais clara agora, ou não. kkk