Dúvida com ArrayList

1 resposta
F

Ola, pessoal. Sei que em java não existe ponteiro como em C, mas o resultado que estou obtendo é o mesmo de um ponteiro. No código abaixo, eu tenho uma ArrayList global povoada com 5 elementos, logo o .size() é 5. Quando atribuo essa lista a uma outra variável, esta segunda variável recebe o mesmo conteúdo da lista original, entretanto, quando eu mudo o valor da lista original, a segunda também é alterada (como se fosse apenas um ponteiro). Alguém sabe explicar o por que disso?

ArrayList<int[][]> listaDePontos = new ArrayList();

public ArrayList<int[][]> func1(){
        ArrayList<int[][]> aux = new ArrayList();
        
        aux = listaDePontos;
        System.out.println("tamanho da lista original:" +listaDePontos.size()); //exibe o valor 5
        System.out.println("tamanho da lista aux:" +aux.size()); //exibe o valor 5

        listaDePontos.clear();

        System.out.println("tamanho da lista original:" +listaDePontos.size()); //exibe o valor 0
        System.out.println("tamanho da lista aux:" +aux.size()); //exibe o valor 0

        return aux;
}

1 Resposta

di.magdaleno

Não existe variável global em Java. Existe apenas o conceito de variável de instância, local ou de bloco.

De qualquer forma, quando você faz: aux = listaDePontos; Você está apontando a variável de referência aux para o mesmo objeto apontado pela variável de referência listaDePontos. Se você inserir o código: listaDePontos = new ArrayList();Será criado um novo objeto que será atribuído para a variável listaDePontos. Nesse momento, existirão dois objetos na heap e acada variável de referência estará apontando para um objeto diferente. Caso altere algum dos objetos o outro não será alterado.

Entenda que, em java, a variável, seja primitiva ou de referência, sempre é passada para a outra por valor.

No caso de variáveis de referência, o valor da variável é uma referência para um objeto. Quando vc diz que uma variavel de referencia é igual a outra variavel de referencia vc está dizendo que a referencia de uma seja passada para a outra.

Segue um artigo muito bom sobre esse tema: http://www.javaranch.com/campfire/StoryPassBy.jsp

Criado 1 de maio de 2013
Ultima resposta 1 de mai. de 2013
Respostas 1
Participantes 2