Инсталировать объект внутри для
Я устанавливаю объект снаружи For и изменяю значение следующим образом:
NotaCaract dadosNota = aux.getListaNotasInicial().createNewNotaCaract();
for(int i=0; i< saida.getListaCompletaProds().size(); i++){
seqIdNota = saida.getListaCompletaProds().getDadosCompletosProd(i).getIdNota().getIntValue();
dadosNota.getIdNota().setIntValue(seqIdNota);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqNotaDesFornecedor = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqNotaDesFornecedor().getIntValue();
dadosNota.getIdNota().setIntValue(seqNotaDesFornecedor);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqNotaDesMorada = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqMorada().getIntValue();
dadosNota.getIdNota().setIntValue(seqNotaDesMorada);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqNotaMoradaFornecedor = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqNotaMoradaFornecedor().getIntValue();
dadosNota.getIdNota().setIntValue(seqNotaMoradaFornecedor);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqFinalidadeFinanciamento = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqFinalidadeFinanciamento().getIntValue();
dadosNota.getIdNota().setIntValue(seqFinalidadeFinanciamento);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqJustificacao = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqJustificacao().getIntValue();
dadosNota.getIdNota().setIntValue(seqJustificacao);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
seqObservacaoAmbitoProposta = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqObservacaoAmbitoProposta().getIntValue();
dadosNota.getIdNota().setIntValue(seqObservacaoAmbitoProposta);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
}
Давайте предположим, что только первый экземпляр имеет значение 1, а все остальные значения равны 0. Мой окончательный список aux.getListaNotasInicial() будет равен 0.
Но когда я делаю это:
for(int i=0; i< saida.getListaCompletaProds().size(); i++){
NotaCaract dadosNota = aux.getListaNotasInicial().createNewNotaCaract();
seqIdNota = saida.getListaCompletaProds().getDadosCompletosProd(i).getIdNota().getIntValue();
dadosNota.getIdNota().setIntValue(seqIdNota);
aux.getListaNotasInicial().addNotaCaract(dadosNota);
NotaCaract dadosNotaDesFornecedor = aux.getListaNotasInicial().createNewNotaCaract();
seqNotaDesFornecedor = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqNotaDesFornecedor().getIntValue();
dadosNotaDesFornecedor.getIdNota().setIntValue(seqNotaDesFornecedor);
aux.getListaNotasInicial().addNotaCaract(dadosNotaDesFornecedor);
NotaCaract dadosNotaDesMorada = aux.getListaNotasInicial().createNewNotaCaract();
seqNotaDesMorada = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqMorada().getIntValue();
dadosNotaDesMorada.getIdNota().setIntValue(seqNotaDesMorada);
aux.getListaNotasInicial().addNotaCaract(dadosNotaDesMorada);
NotaCaract dadosNotaMoradaFornecedor = aux.getListaNotasInicial().createNewNotaCaract();
seqNotaMoradaFornecedor = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqNotaMoradaFornecedor().getIntValue();
dadosNotaMoradaFornecedor.getIdNota().setIntValue(seqNotaMoradaFornecedor);
aux.getListaNotasInicial().addNotaCaract(dadosNotaMoradaFornecedor);
NotaCaract dadosNotaFinalidadeFinanciamento = aux.getListaNotasInicial().createNewNotaCaract();
seqFinalidadeFinanciamento = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqFinalidadeFinanciamento().getIntValue();
dadosNotaFinalidadeFinanciamento.getIdNota().setIntValue(seqFinalidadeFinanciamento);
aux.getListaNotasInicial().addNotaCaract(dadosNotaFinalidadeFinanciamento);
NotaCaract dadosNotaJustificacao = aux.getListaNotasInicial().createNewNotaCaract();
seqJustificacao = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqJustificacao().getIntValue();
dadosNotaJustificacao.getIdNota().setIntValue(seqJustificacao);
aux.getListaNotasInicial().addNotaCaract(dadosNotaJustificacao);
NotaCaract dadosNotaObservacaoAmbitoProposta = aux.getListaNotasInicial().createNewNotaCaract();
seqObservacaoAmbitoProposta = saida.getListaCompletaProds().getDadosCompletosProd(i).getProdutosLeasing().getSeqObservacaoAmbitoProposta().getIntValue();
dadosNotaObservacaoAmbitoProposta.getIdNota().setIntValue(seqObservacaoAmbitoProposta);
aux.getListaNotasInicial().addNotaCaract(dadosNotaObservacaoAmbitoProposta);
}
Мой окончательный список aux.getListaNotasInicial() будет иметь именно те значения, которые я хочу иметь. Почему я должен устанавливать несколько объектов внутри цикла, чтобы использовать их значения, когда я могу просто указать только 1 и изменить его значение, как я хочу?
PS: моя платформа поддерживает только Java 6 Ty
1 ответ
Когда вы создаете экземпляр объекта, вы резервируете место в памяти и сохраняете в нем этот объект (вместе с его значениями). Так, например, в первом случае вы создаете только один объект и резервируете для него одну область памяти. Когда вы создаете экземпляр только одного объекта и изменяете значения для него, каждый раз, когда вы изменяете значение, вы перезаписываете значение.
Кроме того, когда вы объявляете только один экземпляр объекта и добавляете его в массив несколько раз, вы по сути добавляете один и тот же объект (место в памяти). Следовательно, ваш массив будет содержать только последнюю известную модификацию объекта, поскольку все предыдущие данные были перезаписаны. Вот почему вы должны объявить несколько экземпляров объекта, чтобы зарезервировать несколько ячеек памяти и сохранить все различные значения.