我的Java书籍显示了两个正在创建的相同对象,但它们无法通过Object.equals()调用.为什么?

Met*_*uru 0 java equals object

class Test{
  public static void main (String [] args){
    Test t1 = new Test();
    Test t2 = new Test();
    if(!t1.equals(t2))
      System.out.println("they're not equal");
  }
}
Run Code Online (Sandbox Code Playgroud)

它说会打印字符串......为什么它们不相等?它们是否需要与内存中完全相同的对象才能通过该调用?那么它必须与简单地比较所有对象属性值不同,因为我认为它们是相同的(除非有一些基于时间的属性?).有人在意吗?

Boz*_*zho 7

如果你没有覆盖equals(..)方法,那么是 - 它们需要是内存中完全相同的对象.那是因为类equals(..)提供的默认实现Object(默认情况下所有类都扩展)使用对象的(排序)内存地址(它使用==实例上的比较)

但是如果你想根据它们的字段使它们相等,那么覆盖equals(..)并提供自定义逻辑.请注意,hashCode(..)在这种情况下您也应该实现.请参阅java.lang.Object#equals(..)文档