Alguem me explica o porque isso acontece?

4 respostas
J

Fala pessoal.
Eu to lendo o DEITEL e to na pagina 366. To entendendo na moral mas so que
eu to com a seguinte duvida.
Porque quando a gente usa o this, ele fica com uma chamada implicita para o
ultimo metodo que foi utilizado com ele ? (esta correto esse meu
“entendimento” ?!). Como o metodo fica “gravado”, como se explica isso por
favor ?
No exemplo

return "this.toString() : " + this.toString() +
"
toString() : " + toString() +
"
this ( with implicit toString() call ) " + this;

Agora o outro problema… Eu sei que as chamadas de metodo em cascata elas
devem ter como tipo de retorno o objeto que se esta usando mas porque usar o
return this; ? Por favor n respodam que eh pra permitir o encadeamento :stuck_out_tongue:
isso eu sei mas eu quero saber como essa referencia eh passada… n entendi
isso

Obrigado

4 Respostas

A

Amigo,
Na verdade o this faz referência para o objeto(classe) em si. E ele não guarda referência para o último método chamado.
Se você passar o this para qualquer método, você está passado o próprio objeto.
O método toString() existe em qualquer classe pois é herdado da classe java.lang.Object. E chamada explicita do método this.toString() terá o mesmo resultado que a passagem do objeto para um saida qq. Ou seja, quando você concatena o objeto(this) com uma String, implicitamente a JVM chama o método toString().
Agora se você fizer o mesmo teste com outro método verá que isto não acontece, pois passar o this para o System.out.println() por exemplo vai imprimir o endereço de memória do objeto em questão, e não chamar o último metódo usado.

public class Soma{
 	
	public Soma(){
	}
	
	public int soma(int b, int d){
		return  b + d;
	}
	
	public String resultado(int b, int d){
		return  " O resultado de " + b + " + " + d + " é " + this.soma(b,d) + " this="  + this;
	}
	
	public static void main(String args[]){
		Soma s = new Soma();
		System.out.println(s.resultado(1,2));
		
	}
}

Conseguiu entender?

N

É isso aí, você fez uma concatenação de uma String com um objeto, então o java interpreta da seguinte forma:

String + Objeto == String + Objeto.toString();

Ele tenta transformar seu objeto em uma String (ou algo assim) através da chamada do método toString().

De fato, ele não guarda uma referência para o último método.

J

ahhhhhh… saquei :stuck_out_tongue: hehe
Entao so pra ter certeza: Quando se utiliza this em uma String ele usa o Objeto (no caso a classe q a gente esta usando) com o metodo do toString… no caso como sandro disse Objeto.toString() correto ?
Ele nao eh uma referencia a o ultimo metodo chamado e sim ao toString() do Objeto correto ?

Leandro_Rangel_Santo

o this não vai fazer referencia a metodos do objeto ,nunca .
this é apenas um apontador que aponta para o objeto
se você quer concatenar esse objeto ,com uma string usando a referencia this ,o fato do operador “+” ser sobrecarregado para poder fazer a concatenação ,o metodo toString() é chamado .

Criado 16 de julho de 2003
Ultima resposta 17 de jul. de 2003
Respostas 4
Participantes 4