Objeto auxiliar perdendo informação

3 respostas
TheKill

Objetivo:

Tenho o método de Controle de Prestações,
que podem varias em X quantidades de parcelas. Se for alterado o valor
automaticamente o método recalcula os valores das proximas parcelas assim como datas.

Problema:

Se alterar os valores e fazer o método recalcular os valores, estou guardando as informações iniciais
em um objeto auxiliar, para que se o botao Cancelar for clicado, possa retornar aos valores padrões “iniciais”
Porém, esta informação está sendo perdida.

ControlaPrestacao controlaPrestacaoBackup = new ControlaPrestacao(venda);

public ExibePrestacao(Frame owner, Venda venda, Pagamento pagamento) {
super(owner);
		this.venda=venda;
		this.pagamento=pagamento;
		initComponents();
	       controlaPrestacaoBackup = venda.getControlaPrestacao();
private void oBtCancelarActionPerformed(ActionEvent e) {
		venda.setControlaPrestacao(controlaPrestacaoBackup);
		this.dispose();
	}

Grato pela atenção,

Att. Jonas

3 Respostas

edmarr
Não se esqueça , quando vc passa um objeto por parâmetro , vc passa a referencia deste objeto ou seja caso vc faça alguma alteração no método ela sera alterada no objeto que vc passou por parâmetro . exemplo básico .
class Fizz {
	int x = 5;

	public static void main(String[] args) {
		final Fizz f1 = new Fizz();
		Fizz f2 = new Fizz();
		Fizz f3 = FizzSwitch(f1, f2);
		System.out.println((f1 == f3) + " " + (f1.x == f3.x));
	}

	static Fizz FizzSwitch(Fizz x, Fizz y) {
		final Fizz z = x;
		z.x = 6;
		return z;
	}
}

A saida será "true true"

Porque as referencias de f1 e f3 referenciam o mesmo objeto ou seja então se qualquer um sofrer alteração o outro tbm será alterado .

Jose111

É porque os dois estão apontando para a mesma posição de memória neste caso.

Já na situação a seguir isto não acontece, por que?

class teste{
public static void main(String[] args) {
	String a = "a";
			String b = "b";
			String c ="";
			System.out.println(a+"  "+b+"  "+c);
			c=a;
			System.out.println(a+"  "+b+"  "+c);
			a="wwwwwww";
			System.out.println(a+"  "+b+"  "+c);
			a=c;
			System.out.println(a+"  "+b+"  "+c); 
            }
   }
edmarr

Jose111:
É porque os dois estão apontando para a mesma posição de memória neste caso.

Já na situação a seguir isto não acontece, por que?

class teste{ public static void main(String[] args) { String a = "a"; String b = "b"; String c =""; System.out.println(a+" "+b+" "+c); c=a; System.out.println(a+" "+b+" "+c); a="wwwwwww"; System.out.println(a+" "+b+" "+c); a=c; System.out.println(a+" "+b+" "+c); } }

Nao se confunda , em Java eh um String objeto Imutável .

Criado 22 de fevereiro de 2010
Ultima resposta 22 de fev. de 2010
Respostas 3
Participantes 3