[RESOLVIDO]Dúvida sobre vetor de Strings

Boa tarde, pessoal.
Gostaria de saber se tem como eu declarar e instanciar um vetor de Strings ou de algum objeto qualquer de um modo mais enxuto do que o demonstrado no código abaixo.

String[] vetor = new String[10]; /// É realmente necessário eu usar este "for" abaixo para instanciar as Strings? for(int i=0; i<vetor.length; i++) { vetor[i] = new String(); }

Muito obrigado.

Nao precisa instancialas, ate porque voce ja faz isso nessa linha:

String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.

[quote=rof20004]Nao precisa instancialas, ate porque voce ja faz isso nessa linha:

String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.[/quote]

Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:

[code]public class Numero
{

  int val;
  float acum;
  public Numero(int val, float acum)
  {
        this.val = val;
        this.acum = acum;
  }

}

// Se eu tentar, no método “main” ou em outro método fazer como no trecho abaixo, dá erro.
Numero vetor[] = new Numero[2];
vetor[0].val = 1;
vetor[0].val = 1.0;

// Para funcionar eu tenho que fazer como está abaixo:
Numero vetor[] = new Numero[2];
vetor[0] = new Numero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.
vetor[0].val = 1;
vetor[0].val = 1.0;[/code]

A diferenca é que voce esta instanciando a sua propria classe, e nao um tipo primitivo, como é a classe String.

Então, quando eu for instanciar um vetor de objetos que eu criei, devo fazer usando algum loop, tipo o “for”?
E se for um vetor de outro tipo de objeto, como String ou outra classe, desde que eu não tenha criado, não há necessidade disso?

Se sim, é estranho, mas OK.

Obrigado.

Entao mano, nao sei te explicar profundamente, o que sei é que a classe String, ao voce chamar ou atribuir qualquer valor, ela implicitamente ja faz um cast ou chamada ao construtor.

Exemplo:

String nome = “Meu nome”;

Normalmente, um objeto precisaria do new ai para poder ser inicializado, mas veja que com a classe String isso nao é preciso, o que me faz pensar que isso é implicito na API, ou na JVM talvez.

Ok, cara, obrigado pelas suas respostas, como isso ainda não me pareceu conclusivo, deixarei o tópico mais um tempo aqui, depois mudarei o título dele para [RESOLVIDO].

Não sei por que é que se ensina arrays antes de ensinar listas.

Através do acompanhamento deste fórum, percebi que o conceito de array é muito mais difícil de os iniciantes em programação entenderem, que o conceito de listas. E a linguagem Java, ainda por cima, complica essa situação, ao insistir que os arrays têm tamanho fixo e dado no momento de sua criação.

Tanto é que em algumas linguagens, a lista é um tipo “primitivo” (no sentido que ele é primordial na linguagem) - como no caso do Lisp.

[quote=robgeek][quote=rof20004]Nao precisa instancialas, ate porque voce ja faz isso nessa linha:

String[] vetor = new String[10];

Apos essa linha voce pode adicionar valores normalmente ao vetor.[/quote]

Mas cara, por exemplo, eu tenho uma classe igual a que está abaixo, só que no exemplo abaixo não coloquei os outos métodos por que não há necessidade.
E a mensagem de erro é:

[code]public class Numero
{

  int val;
  float acum;
  public Numero(int val, float acum)
  {
        this.val = val;
        this.acum = acum;
  }

}

// Se eu tentar, no método “main” ou em outro método fazer como no trecho abaixo, dá erro.
Numero vetor[] = new Numero[2];
vetor[0].val = 1;
vetor[0].val = 1.0;

// Para funcionar eu tenho que fazer como está abaixo:
Numero vetor[] = new Numero[2];
vetor[0] = new Numero();// Tenho que instanciar um objeto Numero na posição 0 do vetor.
vetor[0].val = 1;
vetor[0].val = 1.0;[/code][/quote]

robgeek ao tentar fazer isso

Numero vetor[] = new Numero[2]; vetor[0].val = 1;
Na primeira linha você não está instanciando os objetos do vetor e sim declarando seu tamanho, então o código geraria uma exceção de NullPointException ao passar pela segunda linha, simplismente porque você está tentando acessar um objeto que ainda não foi instanciado.

Então o certo seria declarar o objeto antes de acessar um método ou variável que ele possui, exemplo:

Numero vetor[] = new Numero[2]; //declara o tamanho do vetor. vetor[0] = new Numero(); //declara o objeto na posição 0 do vetor vetor[0].val = 1; //agora você pode acessa-lo já que a referencia está apontando para um objeto criado acima

O mesmo acontece com a String que em Java não é um tipo primitivo.

vero, String nao é tipo primitivo, so int float double byte short e outros ae, hehehe, desculpe ^^