Java:使用toString().equals()vs. equals()

win*_*ose 3 java equality equals tostring

这是一个理论问题.我有一个我自己设计的对象,带有一堆变量,方法等.我重写了toString方法,主要是为了记录目的,返回变量的值.在我看来,比较这个对象的实例最简单,最直接的方法是比较从toString方法返回的内容.例如,equals方法可能看起来像

public boolean equals(MyObject instance)
{
   return toString().equals(instance.toString());
}
Run Code Online (Sandbox Code Playgroud)

有没有理由不这样做?

das*_*ght 5

避免这种模式的一个原因是速度:为了比较使用的相等性toString(),你必须这样做:

  • String为对象创建临时对象this
  • String为对象创建临时对象instance
  • 逐个比较第一个String到第二个String字符
  • 使临时字符串可用于垃圾检测

如果直接进行比较,可以跳过大部分内容.例如,比较ints直接比较4个字节,而比较它们的字符串表示最多需要9个字节的比较.其他数据类型也会发生类似情况.