Dúvida de Iniciante

6 respostas
A

Olá galera, como podem ver começei hoje no forum, e por sinal gostei muito..
Bom estou cursando análise e desenvolvimento de sistemas (3 semestre) ..
e me interessei muito por java, onde comprei livros e estou começando a estudar...

e nesse livro ( Use a Cabeça, JAVA )
segue um exemplo .. que é :

public class Echo {

int count = 0 ;

void hello ()
{
System.out.println ("Helloooo...");
}
}

Teste !

public class EchoTesteDrive {

public static void main ( String [] args ){

Echo e1 = new Echo () ;
Echo e2 = new Echo (); //resposta correta

//Echo e2 = e1; //resposta adicional

int x = 0 ;

while ( x < 4 ) {
e1.hello () ;
e1.count = e1.count + 1 ;
if (x == 3) {
e2.count = e2.count + 1 ;
}
if ( x > 0 ){
e2.count = e2.count + e1.count ;
}
x = x + 1;
}
System.out.println (e2.count);
}
}

Beleza, entendi perfeitamente o problema e tudo mais, fiz até o teste de mesa e ocorreu tudo certo ( = o java )
Helloooo...
Helloooo...
Helloooo...
Helloooo...
10
(resposta)

e tem uma pergunta adicional que seria a seguinte ..
Se a ultima linha da saída fosse 24 em vez de 10, como voce concluiria o quebra cabeça..
então li a resposta e constatei que era a mesma em que está o comentário na classe Teste! (EchoTestDrive)
"Echo e2 = e1 ;" ( LINHA 8 )
alguem poderia me ajudar a explicar o que aconteceu ?
as váriaveis já não são iguais ?
não consigo entender, obrigado!
abraços.
Angelo

6 Respostas

L

cara já que vc é novo aqui e pra não causar problema à si mesmo olhe

http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor/7

E

COLOCA O CODIGO ENTRE a tags code
Ex:

aquii
A

desculpem hehe
agora podem me ajudar ?

luyz

É que quando voce usa o

e2 = e1

Voce nao esta criando um novo objetos, apenas apontando o objeto E2 para o E1 ou seja, se voce muda o e1 o valor do E2 tambem muda, porque ele é apenas uma referencia…

E na linha

e2.count = e2.count + e1.count;

como o e1 na primeira passada é 2 voce esta fazendo 2 mais 2, pois o e2 esta apontando para o e1 que tem seu count definido para e1.

Agora quando voce faz

Echo e2 = new Echo();

voce cria um novo objeto e quando faz

e2.count = e2.count + e1.count;

na primeira vez que ele passa o count do e2 é 0 pois voce nao definiu nenhum valor para ele, entao sera 0 + 2 (e1).

Ficou mais claro agora?

A

luyz:
É que quando voce usa o

e2 = e1

Voce nao esta criando um novo objetos, apenas apontando o objeto E2 para o E1 ou seja, se voce muda o e1 o valor do E2 tambem muda, porque ele é apenas uma referencia…

E na linha

e2.count = e2.count + e1.count;

como o e1 na primeira passada é 2 voce esta fazendo 2 mais 2, pois o e2 esta apontando para o e1 que tem seu count definido para e1.

Agora quando voce faz

Echo e2 = new Echo();

voce cria um novo objeto e quando faz

e2.count = e2.count + e1.count;

na primeira vez que ele passa o count do e2 é 0 pois voce nao definiu nenhum valor para ele, entao sera 0 + 2 (e1).

Ficou mais claro agora?

Cara, MUITO obrigado pela humildade em me ajudar, entendi como funciona sim !!
tamo ai pro que precisar, abraço !!

luyz

Não precisa agradecer, seja bem vindo ao forum e qualquer duvida só postar

:smiley:

Criado 17 de junho de 2011
Ultima resposta 17 de jun. de 2011
Respostas 6
Participantes 4