Java 为什么contentEquals()方法重载但没有被替换?

Java 为什么contentEquals()方法重载但没有被替换?,java,Java,我现在正在读一本有效的Java书籍,面临以下问题: 考虑String,它有一个contentEquals(StringBuffer)方法 从Java4开始。在Java5中,字符串类配备了重载 采用CharSequence的contentEquals方法的 如果contentEquals(StringBuffer)可以替换为contentEquals(CharSequence),您能解释一下为什么方法会重载吗?从java.lang.String.contentEquals(StringBuffer

我现在正在读一本有效的Java书籍,面临以下问题:

考虑String,它有一个
contentEquals(StringBuffer)
方法 从Java4开始。在Java5中,字符串类配备了重载 采用
CharSequence
contentEquals
方法的


如果
contentEquals(StringBuffer)
可以替换为
contentEquals(CharSequence)
,您能解释一下为什么方法会重载吗?

java.lang.String.contentEquals(StringBuffer)
java.lang.String.contentEquals(CharSequence)的更改
不会破坏契约-即使实现也会委托给较新的重载:
返回contentEquals((CharSequence)sb)

评论意见:

建议简单地替换旧方法,因为
StringBuffer
实现了
CharSequence
,此
contentEquals(CharSequence)
重载仅在1.5中添加。 但是,如果刚刚删除了
contentEquals(StringBuffer)
,在JavaV1.4或更早版本上编译的代码将无法在1.5+上运行。
因此,剩下的唯一解释就是支持在1.5以上的Java版本上生成的二进制文件。

但为什么?如果新参数更常见,那么将接受StringBuffer的所有实例。我错了吗?二进制兼容性。删除旧方法会阻止旧代码使用该方法运行。代码必须重新编译。@jbnize到目前为止,它还没有被弃用和删除,这不足为奇。已经13年了。
 * @since  1.4
 */
public boolean contentEquals(StringBuffer sb) {

 * @since  1.5
 */
public boolean contentEquals(CharSequence cs) {