JDK中有了contentEquals(CharSequence cs)还要contentEquals(StringBuffer sb)干嘛

在java JDK中String的源码中有方法contentEquals(CharSequence cs)和 boolean contentEquals(StringBuffer sb),可是StringBuffer不是也实现了CharSequence吗,那还要contentEquals(StringBuffer sb)干嘛?

  boolean     contentEquals(CharSequence cs)
          将此字符串与指定的 CharSequence 比较。
 boolean     contentEquals(StringBuffer sb)
          将此字符串与指定的 StringBuffer 比较。

  • 从 jdk1.8上看, contentEquals(StringBuffer sb) 是源自 1.4 , contentEquals(CharSequence cs)是源自 1.5,所以是先有 contentEquals(StringBuffer sb) 的

img

  • 另外 如果 CharSequence cs 是 StringBuffer的话,它是线程不安全的,是要进行同步的,如下:

img

在1.4的时候StringBuffer作为参数应该比较常见 后续更新到1.5加了新参数CharSequence 没有废弃做重载应该是因为。删除旧方法会阻止旧代码使用该方法运行。代码必须重新编译。如果废弃了 1.5之前已经编译的二进制文件就不能运行了。
contentEquals(StringBuffer) 的变化至contentEquals(CharSequence)不会违反契约(Contract)——即使是实现委托(delegate)给新的重载