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