There is no String.Equals(object, object) method.
You're seeing Object.Equals.
The reason it doesn't recurse is that objA == objB calls the built-in object equality operator, not the custom string equality operator.
(Operator overloads are resolved based on the compile-time type of the operands)