[Resolvido]Alterar Valor de um Array do Tipo Primitivo em um Enhanced For

2 respostas
S

Bom dia a todos, eu estava aqui fazendo uns testes quando me bateu a seguinte dúvida:

Considere o seguinte bloco de código:

byte a[][] = new byte[2][2];
		for(byte[] b : a) {
			for(byte c : b) {
				//codigo
			}
		}
		for(byte[] b : a) {
			for(byte c : b) {
				System.out.println(c);
			}
		}

Existe alguma forma de alterar o conteudo do array a[][] usando o enhanced for?

2 Respostas

E

A resposta simples é “não”.

Se quiser a explicação, pense em um enhanced for como sendo um código reescrito pelo compilador. Ele vê isto:

byte[] bytes = new byte[20];
for (byte b : bytes) {
    soma += b;
}

como

for (int i = 0; i < bytes.length; ++i) {
    byte b = bytes[i];
    soma += b;
}

Note que b é uma cópia (não uma referência) para bytes[i], portanto não é possível você alterar o array usando o enhanced for.

S

entanglement:
A resposta simples é “não”.

Se quiser a explicação, pense em um enhanced for como sendo um código reescrito pelo compilador. Ele vê isto:

byte[] bytes = new byte[20];
for (byte b : bytes) {
    soma += b;
}

como

for (int i = 0; i < bytes.length; ++i) {
    byte b = bytes[i];
    soma += b;
}

Note que b é uma cópia (não uma referência) para bytes[i], portanto não é possível você alterar o array usando o enhanced for.

Eu havia pensado nisso mas queria ter certeza de que não havia. Depois que eu comecei a usar Enhanced For nunca mais usei a forma abaixo.

Obrigado pela atenção.

Criado 8 de fevereiro de 2013
Ultima resposta 8 de fev. de 2013
Respostas 2
Participantes 2