This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
The String class in Java 5 has two contentEquals(), one that takes in a StringBuffer and another that takes in a CharSequence. contentEquals(CharSequence) was introduced in Java 5 AND StringBuffer IS-A CharSequence as in implements it.
Now, the question. Why do we need contentEquals(StringBuffer) in Java 5. Won't contentEquals(CharSequence) be enough.
One solution to this would be that programs written in Java 1.4 won't run in a Java 5 runtime if contentEquals(StringBuffer) is removed. But then, won't contentEquals(CharSequence) take its place.
The CharSequence version would take its place if you recompiled your code. But removing the method would break binary compatibility -- i.e., code that wasn't recompiled wouldn't work if it called the StringBuffer method.
To the best of my knowledge Sun has actually never removed a method from the API.