Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

java.util - ArrayList - sysout imprimindo endereço da memória

Quando rodo o código:

package br.com.bytebank.banco.test.util;

import java.util.ArrayList;

import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;

public class Teste {
    public static void main(String[] args) {

        ArrayList lista = new ArrayList();

        Conta cc = new ContaCorrente(22, 11);
        lista.add(cc);

        Conta cc2 = new ContaCorrente(22, 22);
        lista.add(cc2);

        System.out.println("Tamanho: " + lista.size());

        Conta ref = (Conta) lista.get(0);
        System.out.println(ref.getNumero());

        lista.remove(0);
        System.out.println("Tamanho: " + lista.size());

        Conta cc3 = new ContaCorrente(33, 311);
        lista.add(cc3);

        Conta cc4 = new ContaCorrente(33, 322);
        lista.add(cc4);

        for(int i = 0; i < lista.size(); i++) {
            Object oRef = lista.get(i);
            System.out.println(oRef);
        }

        System.out.println("----------");

        for(Object oRef : lista) {
            System.out.println(oRef);
        }

    }
}

A impressão que recebo no console é:

br.com.bytebank.banco.modelo.ContaCorrente@15db9742 br.com.bytebank.banco.modelo.ContaCorrente@6d06d69c br.com.bytebank.banco.modelo.ContaCorrente@7852e922

br.com.bytebank.banco.modelo.ContaCorrente@15db9742 br.com.bytebank.banco.modelo.ContaCorrente@6d06d69c br.com.bytebank.banco.modelo.ContaCorrente@7852e922

No vídeo da aula são retornados os valores das respectivas contas (agência e número. Como converter esse endereço nas informações desejadas?

2 respostas
solução!

Olá Victor,

Quando tentas imprimir um objeto em Java, o método toString() é chamado. E esse método por default, imprime o nome completo da classe seguida de um hashcode (e não o endereço de memória).

Para que seja impressa os valores das contas, precisas fazer o override deste método (toString()) . Ou seja, a tua classe Conta precisa implementar o método toString() e retornar nele os dados pretendidos.

Um exemplo:

@Override
public String toString() {
    return "Agencia: " + this.agencia + " \nNumero Conta: " + this.numero;
}

Feito isso, a chamada System.out.println(oRef); irá retonar a agencia e o numero de conta.

Abs

Quando vc recebe o objeto da lista, como ele é sempre uma Conta (Use generics) você pode chamar os métodos para imprimir agência e número Exemplo:

ArrayList<Conta> lista = new ArrayList<>();
...
for ( c : lista) - > Aqui você não pode usar Object, porque object não possui método getAgencia, caso for usar toString, sim, este ele possui
...
System.out.println(c.getAgencia + " " + c.getConta) -> Você monta sua String

Cuidado