o segundo é java 1.5, mas eu testei o segundo caso no meu pc que tem java 1,5 e no do da faculdade 1.5 e não consegui que funcionasse em nenhum dos dois…
compila, mas quando tento utilizar do array eu pego uma RuntimeException, o famoso NullPointerException!
segundo o livro, eles são equivalentes, então porque o segundo não funciona?
agradeço pela atenção e se alguem poder me ajudar! [/quote]
Amigo,
Estes dois códigos são parecidos porém NÃO são iguais…
Observe que no primeiro código o array é populado.
myDogs[x] = new Dog();
Sendo assim quando finalizar o bloco o array terá seis objetos Dogs. Podendo assim utiliza-los.
myDogs[1].late();
myDogs[2].setNome("Thor")
Agora no segundo código o array não é populado. Por isso do NullPointerException quando tenta acessa algum atributo/metodo do objeto.
Dog [] myDogs = new Dog[6];
for (Dog d : myDogs)
d = new Dog(); //Aqui é criado um objeto Dog e
//colocado em d, que tem um escopo apenas dentro do loop.
Veja um exemplo “tosco”, para ficar igual ao primeiro código…
Dog [] myDogs = new Dog[6];
int c = 0;
for (Dog d : myDogs) {
d = new Dog();
myDogs[c] = d;
c++;
}
kissdemon, sim o código compila perfeitamente, mas eu pego um NullPointerException quando tento utilizar myDogs[1] por exemplo…
como o bombbr escreveu o d era uma variavel local dentro do for(Dog d : myDogs) {}
então por isso eu pegava o NPE…
e que na verdade os dois códigos não se equivaliam…
O enhanced for faz o seguinte: “Para cada elemento em myDogs, atribua o elemento myDogs atual a váriavel Dog”. Acontece que você não setou nenhum valor para nenhum elemento em myDogs, causando o NPException