Array de dimensão zero

Dando uma estudada em arrays ví que o seguinte codigo compila e executa:

public class Test{  
	 public static void main(String[] args) { 
		 int[] i = new int[0];
		 System.out.println(i);
	 }
}

Isto imprime [I@3e25a5 que suponho ser o endereço na memória para o objeto alocado i.

Minha dúvida é, quando faço new int[1] ele aloca uma posição na memória pra guardar uma referência para o objeto array i de 1 posição. Quando faço new int[0] o correto (pelo menos eu acho) seria ele não alocar nenhuma posição na memória, mas se ele não aloca, porque imprime [I@3e25a5 no System.out.println ?

Alguém poderia dar uma explicação sobre o que acontece nesse processo ?

att

Olá.

O endereço que é impresso é o endereço de memória do Array (que também é um objeto), e não do conteúdo dele. Por isso, mesmo que o array seja de tamanho 0, ele tem uma endereço de memória.

Diferentemente do C++, você pode alocar arrays de dimensão zero. Isso eu acho bastante legal no Java.
É que todo array é um Object que contém um campo indicando qual é a sua dimensão (aquele membro “length” que todos os arrays têm), e outro campo (esse você não vê) que contém a área de memória alocada - que pode ser, por exemplo, vazia.

o que faz reserva na sua memória não é o seu vetor e sim o new, ele é o responsável por criar um espaço, o quanto necessário definido pelo vetor dentro da memória…
e escreve pq vc indicou o índice onde representa o endereço de mémória… e lembreçe, o vetor não inicia de i = 1 e sim i =0, o índice sempre começa no 0.

falow manow…

Hum, clareei as idéias com os posts de vocês!! Mas não consigo ver uma situação no dia a dia do programador na qual eu precise instaciar um array de dimensão zero, Digo, apesar de o java permitir que os programadores instanciem um array de dimensão zero(Coisa que não é possível em c++ como disse o amigo no post anterior), acho que é uma coisa que não tem aplicação prática ou se tem ainda não consegui perceber :slight_smile:

att,

É você que não conseguiu perceber. Pense em um método que recebe um array de qualquer comprimento - por exemplo, um array contendo clientes. Se você tiver zero clientes, tem de passar um array de comprimento zero.

na verdade: object@26b5d93a… está sendo retornado o nome do obj e um número de identidade deste obj…

qto a utlidade de um array de zeo dimensão… já foi explicado acima.

para este retorno vc poderia fazer este teste:

Carro c = new Carro(); System.out.println(c.toString());

isso retorna o obj@identificador

vc poderia reescrever o método toString() na classe Carro pra te retornar qqer coisa sem ser este identificador.

public String toString(){ return "Modelo: " + this.modelo; }

no main:

Carro c = new Carro("Golf"); //passa para o construtor System.out.println(c); //toString é chamado pela classe PrintStream direto

Sei q não teve nada haver com a dúvida mas, tá aí rs

Abs

Um array de dimensão Zero é um escalar :wink:

[quote=thingol]É você que não conseguiu perceber. Pense em um método que recebe um array de qualquer comprimento - por exemplo, um array contendo clientes. Se você tiver zero clientes, tem de passar um array de comprimento zero.
[/quote]

Mensagem de número 10000 do thingol :stuck_out_tongue: :mrgreen:
Merece um prêmio de maior forum spammer do GUJ!