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 
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 
[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
:mrgreen:
Merece um prêmio de maior forum spammer do GUJ!