[Array] - instância x não instância [Resolvido]

7 respostas
J

Pessoal, bom dia.

Ao ler o trecho de determinado livro apareceu uma dúvida sobre arrays. Gostaria de uma ajuda para entender, tecnicamente, a diferença entre os trechos de código abaixo.

... int[] array = {1,2,3,4,5}; for(int x=0; x<array.length; x++) { System.out.println(array[x]); }

... int[] array = new int[5]; int y = 1; for(int x=0; x<array.length; x++) { array[x] = y; System.out.println(array[x]); y++; }

  • O primeiro trecho cria um array já informando o tamanho e valores.
  • O segundo trecho cria e instancia um array informando o tamanho, os valores serão obtidos somente dentro do for.

A dúvida é a criação ou não da instância, pois os dois trechos retornam o mesmo valor.

Obrigado desde já.

7 Respostas

wbdsjunior

como assim “criação ou não da instância”?

marcosvidolin

também não entendi muito bem…

mas se você quer saber se nos dois casos você terá um objeto array do tipo inteiro. A resposta é, sim!

E

O compilador javac traduz o trecho abaixo:

int[] array = {1,2,3,4,5};

para:

int[] array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

É meio grotesco mas é verdade. Tanto é que o seguinte trecho de código:

double[] array = {Math.random(), x + y, Math.sin (2.0), rand.getDouble()};

é compilado para:

double[] array = new double[4];
array[0] = Math.random();
array[1] = x + y;
array[2] = Math.sin (2.0);
array[3] =  rand.getDouble();

ou seja, tanto faz se o array é inicializado com constantes quanto com expressões, o compilador faz exatamente a mesma coisa.

jurunaloco

para usar um array é necessário informar seu tamanho… mas
no primeiro caso o array está sendo declarado e inicializado de uma vez só, nesse caso nao é necessário informar o tamanho, pois ele será deduzido pelo conteudo dentro das chaves

na segunda opção… é declarado um array de 15 posições
porém nao foi atribuido nenhum valor a essas posições… entao o que é feito no laço é: atribuir um valor y para cada posição do array, depois imprimindo ele

resumindo… a primeira forma vc declara e ja inicializa o array. o tamanho do array será deduzido pelos itens dentro da chave… internamente pelo Sr java
a segunda oção ele cria um array de 15 posições mas nao insere nenhum dados neles… , o que é feito depois dentro do laço

outra forma de percorrer um array é assim:
int[] array = {1,2,3,4,5};

for(int i: MeuArray){

System.out.println(i);

}
J

int[] array = {1,2,3,4,5}; //sem instância
int[] array = new int[5]; //com instância: NEW

Pelo menos é isso que eu entendo por instância.

int[] array // declaração
array = new int[5] // criação de instância
array[0] = 1; // inicialização

M

Você quer entender a diferença entre os dois trechos? Se for isso, a questão de instanciação existe da mesma forma: é declarado e instanciado um array de inteiros em ambos os casos.

Agora, quanto ao preenchimento do vetor, o primeiro caso é feito de forma “estática”, e o segundo você define o tamanho e preenche “dinamicamente”. Diferença entre os métodos: nesse caso nenhuma, mas se você precisasse colocar os números de 1 até 1 milhão no vetor, não sugiro a forma “estática”. :stuck_out_tongue:

A segunda forma pode causar uma perda de performance (eu diria, insignificante), mas poupa muito trabalho.

J

Legal pessoal, ficou bastante claro.

Obrigado a todos.

Criado 2 de outubro de 2009
Ultima resposta 2 de out. de 2009
Respostas 7
Participantes 6