1. I don't know either
why StringBuffer has no equals() method, but Paul's point seems reasonable. There are other classes without an overridden equals(), such as
Throwable. Finally, there is no difference between equals() of Object and the == operator between object references. According to the Java docs:
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
2. Every instance method has an object reference called
this.
this is just a reference to the object that "owns" the instance method. Static methods do not have
this, as, for example, main(). As Paul pointed out, you can access a static variable (assuming the access modifers allow you) using either the class name, or using an object reference, such as
this.
3. What do you mean by "strangely"?