Инсталировать объект внутри для - PullRequest
0 голосов
/ 21 ноября 2018

Я создаю объект вне 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 Ответ

0 голосов
/ 21 ноября 2018

Когда вы создаете экземпляр объекта, вы резервируете место в памяти и сохраняете в нем этот объект (вместе с его значениями).Так, например, в первом случае вы создаете только один объект и резервируете для него одну область памяти.Когда вы создаете экземпляр только одного объекта и изменяете значения для него, каждый раз, когда вы изменяете значение, вы перезаписываете значение.

Кроме того, когда вы объявляете только один экземпляр объекта и добавляете его в массив несколько раз, вы, по сути, добавляете один и тот же объект (место в памяти).Следовательно, ваш массив будет содержать только последнюю известную модификацию объекта, поскольку все предыдущие данные были перезаписаны.Вот почему вы должны объявить несколько экземпляров объекта, чтобы зарезервировать несколько ячеек памяти и сохранить все различные значения.

...