String#equals 和 String#contentEquals 方法之间的区别

2022-08-31 06:43:56

String#equals 方法和 String#contentEquals 方法之间有什么区别?


答案 1

String#equals() 不仅比较 String 的内容,还检查另一个对象是否也是 .String#contentEquals() 仅比较内容(字符序列),而不检查其他对象是否也是 的实例。它可以是任何东西,只要它是CharSequence的实现,它涵盖了a.o. StringStringBuilderStringBufferCharBuffer等。StringString


答案 2

简单地说:String.contentEquals()String.equals()更聪明的兄弟,因为它在实现中比String.equals()更自由。

有一些原因可以解释为什么有一个单独的方法。我认为最重要的原因是:String.contentEquals()

  • 该方法必须是自反的。这意味着:.这意味着它必须与 相同。这将要求Java API开发人员在StringBuffer,StringBuilder和CharSequence的方法中为Strings进行一些特殊的实现。这将是一团糟。equalsx.equals(y) == y.equals(x)aString.equals(aStringBuffer)aStringBuffer.equals(aString)equals()

这就是进来的地方。这是一个独立的方法不必遵循 严格的要求和规则。这样,您可以更自由地实现“平等内容”的感觉。例如,这允许您在 StringBuffer 和 String 之间进行智能比较。String.contentEqualsObject.equals

并说出究竟有什么区别:

  • String.contentEquals()可以比较 a、a、a、a 和这些类的所有派生类的内容。如果参数的类型为 String,则执行。StringStringBuilderStringBufferCharSequenceString.equals()

  • String.equals()仅比较字符串对象。所有其他对象类型都被视为不相等。

  • String.contentEquals()可以比较并以智能方式。它不调用重装方法,该方法将整个内容复制到新的 String 对象。相反,它与底层数组进行比较,这很棒。StringBufferStringBuildertoString()char[]