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 ?
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.
T
thingol
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.
M
Marcaobu
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…
rafaengenharia
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,
T
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.
C
clonex8
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
peczenyj
Um array de dimensão Zero é um escalar
victorwss
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.
Mensagem de número 10000 do thingol :mrgreen:
Merece um prêmio de maior forum spammer do GUJ!