Olá
Nunca altere o estado dos objetos passados por parâmetro de um método, utilize uma variável temporária quando alterar o valor de algum atributo do objeto.
Essa prática é para evitar erros diante de uma confusão causada pelo tipo de passagem de valores que o Java adota. Java sempre faz a passagem por valor.
Abaixo um exemplo de erro que levamos a cometer quando alteremos o estado de um objeto.
Nós temos um objeto do tipo ItemPedido que possui os atributos quantidade e preço. Passamos esse objeto para o método totalizarPedido(), que para seu calculo interno subtrai um caso o parâmetro promoLeveUmGratis for true.
[sourcecode lang=java]if(promoLeveUmGratis){
item.setQuantidade(item.getQuantidade().subtract(BigDecimal.ONE));
}[/sourcecode]
Observe que estamos atribuindo o resultado da subtração no mesmo objeto que recebemos por parâmetro para o cálculo na linha abaixo.
[sourcecode lang=java]return item.getQuantidade().multiply(item.getPreco());[/sourcecode]
Em seguida os métodos calcularFrete() e darBaixaNoEstoque() são invocados.
[sourcecode lang=java]ex.totalizarPedido(ip, true);
ex.calcularFrete(ip);
ex.darBaixaNoEstoque(ip);[/sourcecode]
Coloquei alguns sysout´s para ilustrar o problema.
Quantidade de itens no pedido: 10
Quantidade de itens no frete: 9
Quantidade de itens a dar baixa: 9
Note que para os dois métodos seguintes a quantidade que chegou foi alterada, não era essa a intenção. Isso traria sérios problemas para nós.
Downloads: [Download não encontrado.] [Download não encontrado.]
Até mais,