Qual a saída dessa?

Given the following code what will be the output?

[code]
class ValHold{
public int i = 10;
}

public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.print( v.i );
}//End of amethod

    public void another(ValHold v, int i){
            i=0;
            v.i = 20;
            ValHold vh = new ValHold();
            v =  vh;
            System.out.print(v.i);
    System.out.print(i);
    }//End of another

}[/code]

  1. 10030
  2. 20030
  3. 209930
  4. 10020

imprime: 10020

nesta linha está se instanciando outro objeto e atribuindo ele a variável v,
portanto todas as mudanças aqui não serão refletidas no objeto passado como parâmetro, pois este referencia uma outra área de memória

ValHold vh = new ValHold();
v = vh;

portanto quando sair do metodo another(ValHold v, int i) irá imprimir 20 que foi a última atualizaçao feita na referência do primeiro objeto.
v.i = 20;

:smiley:

vc está certo, mas eu naum consegui entender isso de jeito nenhum…
qual a ordem q é impresso isso? eu achei q era a seguinte:
System.out.print(v.i);// de another
System.out.print(i); // de another
System.out.print( v.i )// de amethod
Valew.

a ordem é essa mesmo;
System.out.print(v.i);// de another -> imprime: 10
System.out.print(i); // de another -> imprime: 0
System.out.print( v.i )// de amethod -> imprime: 20

a linha v.i = 20; altera o objeto original…

o segredo está nesta linha:
ValHold vh = new ValHold();
quando vc faz isso está criando um novo objeto em um outro local de memória, portanto daqui para frente qualquer alteração não refletirá no objeto original, pois eles apontam para locais diferentes de memória…

qualquer dúvida pergunte… :smiley:

Agora entendi, não é tão complicado assim, mas me confundiu muito… :oops:
Valew.

como seria feita para que “vh” alterasse o objeto “v” original?

Como o ricardo falow:

ValHold vh = new ValHold();
v = vh;

nesse momento um novo objeto é criado e v passa a apontar para esse novo objeto, acho q se fosse ao contrario:

vh = v

o “vh” estaria apontando para o v antigo, aí acho q aconteceria isso q vc perguntou.

Me descupa se eu estiver errado, mas tenho muito oq aprender ainda.
Falow.

[quote=“ricardolecheta”]imprime: 10020

nesta linha está se instanciando outro objeto e atribuindo ele a variável v,
portanto todas as mudanças aqui não serão refletidas no objeto passado como parâmetro, pois este referencia uma outra área de memória

ValHold vh = new ValHold();
v = vh;

portanto quando sair do metodo another(ValHold v, int i) irá imprimir 20 que foi a última atualizaçao feita na referência do primeiro objeto.
v.i = 20;

:D[/quote]

Desde quando vc instancia um objeto???

Tá certo que o que você instancia é a classe, e aí obtém um objeto como resultado disso, mas ninguém fica dizendo "instanciando-se a classe obtém-se outro objeto…"
Em linguagem de programador, quando alguém diz “instanciar um objeto” já fica implícito que está falando “instanciar uma classe para obter um objeto”.
O verbo instanciar requer um objeto direto, mas não tenho certeza se esse objeto tem que ser a causa da ação. Acho que não tem problema ser a consequencia.

[quote=“Bani”]Tá certo que o que você instancia é a classe, e aí obtém um objeto como resultado disso, mas ninguém fica dizendo "instanciando-se a classe obtém-se outro objeto…"
Em linguagem de programador, quando alguém diz “instanciar um objeto” já fica implícito que está falando “instanciar uma classe para obter um objeto”.
O verbo instanciar requer um objeto direto, mas não tenho certeza se esse objeto tem que ser a causa da ação. Acho que não tem problema ser a consequencia.[/quote]

Acho que com certeza se vc falar para um programador “Instanciar um Objeto” ele vai dizer que Objetos naum saum instanciados…

Por isso que vc instancia a classe para ser usada no objeto, ou seja, o objeto eh uma instancia de uma classe

cyber,

pelo amor de deus…
pra que criar discussao, tanto faz a forma de falar instanciar um objeto ou uma classe o importante é saber programar e ajudar aos que precisam, como o Bani fez…

[quote=“leo.dep”]cyber,

pelo amor de deus…
pra que criar discussao, tanto faz a forma de falar instanciar um objeto ou uma classe o importante é saber programar e ajudar aos que precisam, como o Bani fez…[/quote]

Sem grito manow… so estava adicionando uma informação pra naum sair dando gafes por ai…

Quando fiz um curso o amigo meu falou assim pro prof:

“professor mas quando eu instancio o objeto a inner class naum eh carregada primeiro”;

Ai o professor pagou o maior sabão pro moleke, pois ficou meio sem nexo ate na resposta dele…

Ai manow,

so to te falando para nao criar polemica, deu o seu recado e pronto nao precisa ficar de blablablablablabalbla, cabe a pessoa aceitar a sua resposta e pronto…