在我的MyClass级课程中,我有一个@Override for equals():
public class MyClass extends MySuperClass
{
...
@Override
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( o == null || this.getClass() != o.getClass() )
{
return false;
}
if ( !super.equals( o ) )
{
return false;
}
MyClass that = ( MyClass ) o;
return this.var1.equals( that.var1 ) && this.var2.equals( that.var2 );
}
...
}
相当标准.事实上,它遵循Java最佳实践
在以后的生活中,我在另一个子包类(我的控制器类)中有这个:
...
package com.a.b.api.controllers;
...
import com.a.b.jpa.models.MyClass;
...
MyClass myObject1 = new MyClass( var1, var2 );
MyClass myObject2 = this.myClassRepository.getById( 1 ); // SpringBoot/Jpa/Hibernate
if ( myObject2.equals( myObject1 ) )
{
...do something...
}
...
this.myClassRepository.save( myObject1 );
...
我的问题是,.equals()在这里总是失败:
if ( o == null || this.getClass() != o.getClass() )
因为java说this.getClass()和o.getClass()等于NOT.当我调试代码(在Intellij IDEA 2022.1 UE中)时,我看到:
这.GetClass()=MyClass@13706
但是
o、 getClass=com.a、 b.jpa.模型.MyClass@8f7462
但他们是同一个班的!几乎每一本Java书籍、教程、博客、Intellij IDEA等都以这种方式演示了.equals().我在Ubuntu20.04.4 LTS java-14-openjdk-amd64和java-17-openjdk-amd64中try 过这个,结果是一样的.
我做错了什么?