segunda-feira, 26 de novembro de 2007

Efeito Colateral

Observe o exemplo:

//Classe ponto

class Ponto {
public float x,y;
.
.
.
}

//Classe principal

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

//preparacao das variaveis copia de objetos

Ponto pOriginal,pAlias,pCopia;
pOriginal=new Ponto((float)0.0,0.0f);
pAlias=pOriginal; //copiando atraves de atribuicao
pCopia=new Ponto(pOriginal.x,pOriginal.y); //copiando atributo por atributo
}


Preparacao das variaveis, copia de objetos:

pAlias e uma referência para o mesmo local de memória que pOriginal, por este motivo
quando pAlias é alterado, pOriginal se altera por “efeito colateral”, eles compartilham o mesmo
objeto pois a atribuição pAlias=pOriginal, copia o endereço de pOriginal.
Já pCopia, é o resultado de uma nova alocação de memória, portanto um novo endereço, um
objeto independente dos outros.

Comparacao de objetos:

pOriginal==pAlias e outras comparações equivalentes têm o significado de comparação do
endereço de memória e não do conteúdo.

pOriginal.x==pCopia.x tem o significado de comparação do valor desses atributos, assim
como uma comparação entre inteiros. Se esses atributos por sua vez fossem objetos, esta operação teria o significado de comparação entre endereços de memória dos objetos.

Nenhum comentário: