Your output of "Leaf@3e25a5" is a
string representation of the instance Leaf. You see this because implicitly the println() method changes the Leaf object to a string by calling the Object class's toString(). By definition (according to the API), the stuff after the @ sign is the hashcode of that instance. Again this hashcode is calling the internally hashcode() method of the Object class.
Your question is not really about the "this" keyword but why the output has the "@xxxx" at the end.
In your code, it is not necessary to return "this" or the class itself for the increment() method because your variable "i" is an instance variable.
About the "this" keyword, it is used for referencing the current object's or instance's variable, methods etc.