我有 2 个字符串缓冲区类的相同值对象. 字符串等于() 方法 显示错误结果 为什么


StringBuffer str1=new StringBuffer("hello1");
StringBuffer str2=new StringBuffer("hello1");
System.out.println(str1.equals(str2));

它会显示错误的结果为什么?

StringBuffer equals()方法不会被覆盖以检查内容。它使用默认的"浅相等"来比较它从java.lang.Object.继承的引用

所以

StringBuffer str1=new StringBuffer("hello1");
StringBuffer str2=new StringBuffer("hello1");
System.out.println(str1.equals(str2));

是比较参考,这就是为什么你得到错误

StringBuffer类中没有覆盖equals。因此,它继承了Object类的定义。从Java API中,我们知道它的行为:

类对象的 equals 方法实现了最具辨别力的方法 对象上可能的等价关系;也就是说,对于任何非空 引用值 x 和 y,此方法返回 true 当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)。

您有两个不同的对象,因此在这种情况下equals返回false

最新更新