4
respostas

Instancia da primeira

Quando uso: System.out.println(segundaConta.saldo); aparece o saldo da primeira conta.

Entendo que ao usar:: System.out.println(primeiraConta); deveria aparecer todos os dados, porém o resultado é: Conta@54bedef2.

Porque acontece isso?

4 respostas

Oi Bruna

Apenas para eu conseguir te explicar com mais precisão, poderia enviar seu código?

Abraço!

Oi Otávio, segue abaixo:

public class TestaReferencia {

    public static void main(String[] args) {
        Conta primeiraConta = new Conta();
        primeiraConta.saldo = 300;

        System.out.println("Saldo da primeira conta:" + primeiraConta.saldo);

        Conta segundaConta = primeiraConta;

        System.out.println("o saldo da segunda conta é " + segundaConta.saldo);
        segundaConta.saldo += 100;

        System.out.println("saldo da segunda conta atualizado " + segundaConta.saldo);
        System.out.println("Saldo da primeira conta atualizado " + primeiraConta.saldo);

        //If para ver a referencia da conta
        if (primeiraConta == segundaConta) {
            System.out.println("As contas são iguais");

        }

        else {
            System.out.println("São contas diferentes");
        }
    }
}
Entendo que ao usar:: System.out.println(primeiraConta); deveria aparecer todos os dados, porém o resultado é: Conta@54bedef2.

Está imprimindo o endereço de memória Conta@54bedef2 por conta que não existe o método toString() na sua classe Conta, se você implementar conforme exemplo abaixo será impresso "Conta{saldo=300.0, agencia=0, numero=0, titular='null'}"

class Conta{

    double saldo;
    int agencia;
    int numero;
    String titular;

    @Override
    public String toString() {
        return "Conta{" +
                "saldo=" + saldo +
                ", agencia=" + agencia +
                ", numero=" + numero +
                ", titular='" + titular + '\'' +
                '}';
    }
}
Quando uso: System.out.println(segundaConta.saldo); aparece o saldo da primeira conta.

Isso acontece porque no código que você envou existe apenas 1 objeto conta (você chamou o new apenas uma vez) e está referenciando esse mesmo objeto usando a variável primeiraConta e segundaConta, mas de fato são o mesmo objeto.

Conta primeiraConta = new Conta(); // cria 1 objeto conta e referencia ele por primeiraConta
primeiraConta.saldo = 300; // coloca o saldo do objeto conta em 300

Conta segundaConta = primeiraConta; // segundaConta aponta para o mesmo objeto que primeiraConta

if (primeiraConta == segundaConta) { // são o mesmo objeto Conta

....

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software