Todos os objetos em Java s�o referencias.

Referencia = ponteiro bem comportado

Quando voce coloca um objeto dentro de um vetor, voce esta colocando sua 
referencia e nao uma copia dele.

No seu segundo loop (for) voce utiliza novamente os objetos que j� foram 
introduzidos no vetor no primeiro loop (while).

Quando voce modifica o valor deles, automaticamente voce esta modificando o 
objeto que esta dentro do vetor. As referencias s�o iguais, apontam para o 
mesmo objeto.

Apenas variaveis primitivas em Java sao passadas por copia. Todo o resto eh 
passado por referencia.

[]s

Sergio


>From: valter vieira de camargo <[EMAIL PROTECTED]>
>Reply-To: [EMAIL PROTECTED]
>To: [EMAIL PROTECTED]
>Subject: [java-list] problemas com Vector. URGENTE!!!!!
>Date: Tue, 27 Mar 2001 16:17:06 -0300
>
>Pessoal, coloquei em attach um m�todo que estou tendo problemas.... Ele
>carrega um vetor corretamente mas na hora de retorn�-lo ocorrem algumas
>altera��es.
>Coloquei v�rios coment�rios para auxiliar no compreendimento do
>m�todo.... por favor d�em uma olhada.... estou com urg�ncia disso e n�o
>consigo resolver o problema....
>
>
>
>[]'s Valter
>O problema que est� acontecendo � o seguinte: Dentro do for, o vetor � 
>carregado corretamente,
>com tr�s objetos do tipo Fornecimento. Eu sei disso por que j� testei. 
>Quando o for acaba e
>vai dar o "return vetor" o conte�do do vetor j� n�o � mais o mesmo !!!
>
>Explicando melhor: Depois da �ltima repeti��o do for, o primeiro objeto 
>fornecimento do vetor,
>possui um fornecedor de c�digo 1, o segundo um fornecedor de c�digo 2 e um 
>terciro fornecedor de
>c�digo 3. Se eu mandar imprimir os c�digos dos fornecedores fora do "for", 
>isto �,
>uma linha antes dele retonar (return) aparecer� que o primeiro objeto 
>fornecimento do vetor
>possui c�digo 2 ! o segundo c�digo 3! e o terceiro tamb�m c�digo 3 !!!
>
>
>
>     public Vector SetObject2(ResultSet rsFornec)
>     {
>          Vector vetor = new Vector();
>     try
>     {
>         // inicio da declara��o das vari�veis necess�rias
>
>         int material;
>         Vector vectorFornecedor = new Vector();
>         Vector vectorMaterial = new Vector();
>         Vector vectorDataFornecimento = new Vector();
>         Integer codFornecedor;
>         Integer codMaterial;
>         int codMaterialI;
>         int codFornecedorI;
>         String dataFornecimento;
>         CodigoFornecimento codigoFornecimento;
>         Fornecimento fornecimento1;
>         material material1 = new material();
>         Fornecedor fornecedor1 = new Fornecedor();
>         ResultSet rsMaterial;
>         ResultSet rsFornecedor;
>
>         // final da declara��o das vari�veis necess�rias
>
>         int i = 0;
>
>          // while respons�vel por criar tres vetores. Um com o codigo dos 
>fornecedores, outro
>          // com o c�digo dos materiais e outro com a data de fornecimento. 
>Tudo pego do resultSet
>          // que chegou como par�metro.
>
>           while (rsFornec.next ())
>           {
>             codFornecedor = new Integer(rsFornec.getInt ("fornecedor"));
>             codMaterial = new Integer(rsFornec.getInt ("material"));
>             vectorMaterial.addElement (codMaterial);
>             vectorFornecedor.addElement (codFornecedor);
>             vectorDataFornecimento.addElement (rsFornec.getString 
>("dataFornecimento"));
>
>           }
>
>
>       // o objetivo do for � criar um vetor de objetos do tipo 
>Fornecimento. O objeto do tipo
>       // fornecimento � formado por um objeto do tipo CodigoFornecimento e 
>uma String dataFornecimento.
>       // o objeto do tipo CodigoFornecimento � formado pelos objetos 
>Material e Fornecedor.
>       // sendo assim, primeiro eu carrego um objeto fornecedor, depos um 
>material, crio o objeto
>      // codigoFornecimento e crio um objeto Fornecimento. E em seguida 
>adiciono no vetor. O for
>      // repete esta a��o para todos os elementos do vetor de codigos de 
>fornecedor criado no while
>     // anterior.
>
>       for (int cont = 0; cont < vectorFornecedor.size (); cont++)
>       {
>             codFornecedor = (Integer)vectorFornecedor.elementAt(cont);
>             codMaterial = (Integer)vectorMaterial.elementAt (cont);
>             codMaterialI = codMaterial.intValue ();
>             codFornecedorI = codFornecedor.intValue ();
>             dataFornecimento = (String)vectorDataFornecimento.elementAt 
>(cont);
>             fornecedor1.setCodigo (codFornecedorI);
>             rsFornecedor = null;
>             rsFornecedor = fornecedor1.findlike ();
>            // o m�todo findlike procura esse objeto no banco e joga os 
>dados em um RS.
>
>             if (rsFornecedor.next ())
>                 {
>                     fornecedor1 = fornecedor1.SetObject (rsFornecedor);
>                     // o m�todo SetObject pega os dados do rs passado e 
>cria um objeto
>                 }
>
>             material1.setCodigo (codMaterialI);
>             rsMaterial = null;
>             rsMaterial = material1.findlike ();
>             if (rsMaterial.next ())
>             {
>                 material1 = material1.SetObject (rsMaterial);
>             }
>
>             codigoFornecimento = new 
>CodigoFornecimento(material1,fornecedor1); //cria objeto codigoFornecimento
>             fornecimento1 = new Fornecimento(codigoFornecimento, 
>dataFornecimento); // cria objeto Fornecimento
>             vetor.insertElementAt (fornecimento1,cont); adiciona elemento 
>no vetor
>
>             // se eu mandar imprimir aqui est� tudo certo...
>        }
>
>             // Se eu mandar iprimir aqui ele j� trocou tudo...
>             return vetor;
>        }
>        catch (Exception e)
>        {
>         return null;
>        }
>      }
>
>------------------------------ LISTA SOUJAVA ----------------------------
>http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP
>d�vidas mais comuns: http://www.soujava.org.br/faq.htm
>regras da lista: http://www.soujava.org.br/regras.htm
>para sair da lista: envie email para [EMAIL PROTECTED]
>-------------------------------------------------------------------------

_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usu�rios Java da Sucesu-SP 
d�vidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a