3
respostas

Array do tipo Object dúvida a respeito das referências

package testeJavaUtil;

public class Main {
public static void main(String[] args) {
    Conta conta[] = new Conta[2];
    for(int i=0;i<conta.length;i++) 
    {
        Conta contaPessoal = new Conta();
        if(i==0) {
            contaPessoal.setNomeDaPessoa("Ola mundo");
        }else {
            contaPessoal.setNomeDaPessoa("Mundo ola");
        }

        conta[i]=contaPessoal;
        System.out.println(conta[i].getNomeDaPessoa());
    }
  }
 }

Estou com dúvida a respeito do array do tipo object conta[], se cada posição de um array do tipo object é uma referência para o objeto contaPessoal. Cada vez que array mudar a posição a contaPessoal não seria sobrescrita e logo a saída não seria as duas iguais (por causa do conteúdo na memória)? A saída gerou "Ola mundo" na posição conta[0] e "Mundo ola" na posição conta[1]. Por que isso acontece? O que acontece no espaço de memória alocado com a variável contaPessoal?

3 respostas

Olá Mauricio, tudo bem?

O array criado tem duas posições em memória (index 0 e index 1). A cada iteração no "for" é criado um novo objeto Conta; o for é executado apenas duas vezes. O primeiro objeto Conta com valor "Ola mundo" foi colocado na posição 0 do array. O segundo objeto com nome "Mundo ola" foi colocado na posição 1 do array.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Acredito que você esteja criando vários objetos do tipo conta com o mesmo nome. No caso você ta instanciando "contaPessoal" 2 vezes, não o objeto "conta". O objeto "conta" é uma array, mas o "contaPessoal" nao.

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

        ContaCorrente[] cc = new ContaCorrente[7];

        for (int i=0; i < 7; i++) {
            cc[i] = new ContaCorrente((i * 2 + 11), (i * 11 + 14));
            System.out.println("Conta Corrente " + (i+1));
            System.out.println("Agencia: " + cc[i].getAgencia());
            System.out.println("Numero conta: "  + cc[i].getNumeroConta());
            System.out.println();
        }
    }
}

Tente algo parecido com isso