"Dúvida" Apostila CS14 {Caelum}

Olá pessoal.

Nas duas últimas semanas tirei um tempo para “rever” algumas coisas básicas de java, já que tenho me dedicado um pouco mais em Ruby e Rails.
Estou estudando a apostila da Caelum CS 14, ótima por sinal.
Minha dúvida é digamos bem burrinha mesmo (Não tenho vergonha de dizer isso :—) ).

Quando vou imprimir a lista de alunos, não printa os nomes e sim o endereço/referência do objeto, conforme abaixo:

Espaço atual utilizado: 1 - Tamanho total disponível: 100
Metódo testaAdicionaNoFim - br.com.caelum.ed.Vetor@1172e08

Fontes:
Classe de testes

/* * Teste ADICIONA NO FIM */ private void testaAdicionaNoFim(){ Aluno a1 = new Aluno(); Aluno a2 = new Aluno(); a1.setNome("Rafael"); a2.setNome("Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); System.out.println("Metódo testaAdicionaNoFim - " + lista);

Classe Vetor

[code]package br.com.caelum.ed;

public class Vetor {

private int totalDeAlunos = 0;
private Aluno[] alunos = new Aluno[100]; 

/*
 * Metódo adiciona. 
 * Aqui o consumo de tempo é CONSTANTE (Melhor desempenho - o tempo de processamento será sempre o mesmo)
 */
public void adiciona(Aluno aluno){
	//Verifica primeiro se o array atual tem espaço disponível
	this.garantaEspaco();
	this.alunos[this.totalDeAlunos] = aluno;
	this.totalDeAlunos++;
}

/*
 * Adiciona um aluno no array, verificando se a posição é válida, se a posição já existir
 * é preciso mover todos os elementos para a direita e sim inserir o dado na posição liberada
 */
public void adiciona(int posicao, Aluno aluno){	
	//Verifica primeiro se o array atual tem espaço disponível
	this.garantaEspaco();
	if(!this.posicaoValida(posicao)){
		throw new IllegalArgumentException("Posição Inválida!");
	}
	for(int i=this.totalDeAlunos-1; i >= posicao; i--){     
		this.alunos[i + 1] = this.alunos[i];
	}
	this.alunos[posicao] = aluno;
	this.totalDeAlunos++;
}

/*
 * Retorna o aluno no array da posição especificada
 */
public Aluno pega(int posicao){
	if(!this.posicaoOcupada(posicao)){
		throw new IllegalArgumentException("Posição Inválida!");
	}
	return this.alunos[posicao];
}

/*
 * Remove o aluno no array da posição espeficada e reorganiza o array 
 * movendo os elementos para a esquerda, reordenando o array novamente
 */
public void remove(int posicao){
	if(!(this.posicaoOcupada(posicao))){
		throw new IllegalArgumentException("Posição Inválida!");
	}
	for(int i=posicao; i < this.totalDeAlunos -1; i++){
		this.alunos[i] = this.alunos[i + 1];
	}
	this.totalDeAlunos--;
}
/*
 * Valida se a posição esta ocupada
 * Realiza a validação com o seguinte crieterio:
 * Se a posição estiver entre 0 e a PENULTIMA posição preenchida no array, retorna true, senão retorna false
 */
private boolean posicaoOcupada(int posicao){
	return posicao >=0 && posicao < this.totalDeAlunos;
}

/*
 * Valida se a posição é válida
 * Realiza a validação com o seguinte criterio: 
 * Se posicao estiver entre 0 e a ÚLTIMA posição preenchida no array, retorna true, senão retorna false
 */
private boolean posicaoValida(int posicao){
	return posicao >=0 && posicao <= this.totalDeAlunos;
}

/*
 * Metódo contem, aqui a comparação é via equals, ou seja,
 * comparando referência de objetos, que é o correto aqui nesse caso
 */
public boolean contem(Aluno aluno){
	for(int i=0; i < this.totalDeAlunos; i++){
		if(aluno.equals(this.alunos[i])){
			return true;
		}
	}
	return false;
}

/*
 * Return of lenght the list
 */
public int tamanho(){
	return this.totalDeAlunos;
}

/*
 * Sobrescrevendo o metódo toString()
 * (non-Javadoc)
 * @see java.lang.Object#toString()
 */
public String toString(){
	if(this.totalDeAlunos == 0){
		return "[]";
	}
	StringBuilder builder = new StringBuilder();
	builder.append("[");
	for(int i=0; i < this.totalDeAlunos -1; i++){
		builder.append(this.alunos[i]);
		builder.append(", ");
	}
	builder.append(this.alunos[this.totalDeAlunos -1]);
	builder.append("]");
	return super.toString();
} 

/*
 * Verifica se o espaço do Array inicial estorou, 
 * se sim, cria uma nova array com tamanho duas vezes maior, 
 * realiza a cópia dos dados e depois realoca novamente no original com o tamanho alterado (t.o * 2)
 * {ALOCAÇÃO DINÂMICA}
 */
private void garantaEspaco(){
	if(this.totalDeAlunos == this.alunos.length){
		Aluno[] novaArray = new Aluno[this.alunos.length * 2];
		for(int i=0; i < alunos.length; i++){
			novaArray[i] = this.alunos[i];
		}
		this.alunos = novaArray;
	}else{
		System.out.println("Espaço atual utilizado: " + this.totalDeAlunos + " - Tamanho total disponível: " + this.alunos.length);
	}
}

}
[/code]

Classe Aluno

[code]package br.com.caelum.ed;

public class Aluno {

private String nome;

public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}	
public String toString(){
	return this.nome;	
}
public boolean equals(Object object){
	Aluno outro = (Aluno) object;
	return this.nome.equals(outro.nome);
}

}
[/code]

Agradeço a “força”.

Abs e obrigado!!!

edvaldomelo,

O problema está neste trecho:

private void testaAdicionaNoFim(){  
Aluno a1 = new Aluno();  
Aluno a2 = new Aluno();  
a1.setNome("Rafael");  
a2.setNome("Paulo");  
Vetor lista = new Vetor();  
lista.adiciona(a1);  
lista.adiciona(a2);  
System.out.println("Metódo testaAdicionaNoFim - " + lista);

Você não pode imprimir apenas “lista”. Você tem que imprimir os atributos de lista. Como no trecho abaixo:

System.out.println("Metódo testaAdicionaNoFim - " + lista.pega(1));
System.out.println("Metódo testaAdicionaNoFim - " + lista.pega(2));

Se você imprimir diretamente lista, estará imprimir o método toString(), herdado de Object. Só para você entender melhor, se vc sobrescrevesse o método toString, conforme abaixo, o seu código imprimiria “Olá Mundo”:

public String toString() {
     return "Olá Mundo";
}

Espero ter ajudado, abraços