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 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
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).
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?
[/quote]
Cara, MUITO obrigado pela humildade em me ajudar, entendi como funciona sim !!
tamo ai pro que precisar, abraço !!