Fas*_*owy 73 java methods class equals object
我用一个String字段构建了一个类.然后我创建了两个对象,我必须使用==运算符进行比较.equals().这就是我所做的:
public class MyClass {
String a;
public MyClass(String ab) {
a = ab;
}
public boolean equals(Object object2) {
if(a == object2) {
return true;
}
else return false;
}
public boolean equals2(Object object2) {
if(a.equals(object2)) {
return true;
}
else return false;
}
public static void main(String[] args) {
MyClass object1 = new MyClass("test");
MyClass object2 = new MyClass("test");
object1.equals(object2);
System.out.println(object1.equals(object2));
object1.equals2(object2);
System.out.println(object1.equals2(object2));
}
}
Run Code Online (Sandbox Code Playgroud)
编译后,结果显示两次false.如果两个对象具有相同的字段 - "test",为什么它是错误的?
T.J*_*der 127
==比较对象引用,它检查两个操作数是否指向同一个对象(不是等效对象,同一个对象).
如果要比较字符串(以查看它们是否包含相同的字符),则需要使用比较字符串equals.
在您的情况下,如果MyClass字符串匹配,如果两个实例被认为是相等的,则:
public boolean equals(Object object2) {
return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}
Run Code Online (Sandbox Code Playgroud)
...但通常如果你要定义一个类,那么等效性就等于单个字段的等效性(a在这种情况下).
旁注:如果覆盖equals,几乎总是需要覆盖hashCode.正如它在equalsJavaDoc中所说:
请注意,通常需要在重写此
hashCode方法时覆盖该方法,以便维护该hashCode方法的常规协定,该协定声明相等的对象必须具有相等的哈希代码.
小智 16
你应该重写等于
public boolean equals (Object obj)
{
if (this==obj) return true;
if (this == null) return false;
if (this.getClass() != obj.getClass()) return false;
// Class name is Employ & have lastname
Employe emp = (Employee) obj ;
return this.lastname.equals(emp.getlastname());
}
Run Code Online (Sandbox Code Playgroud)
小智 7
比较 2 个对象的最佳方法是将它们转换为 json 字符串并比较字符串,这是处理复杂嵌套对象、字段和/或包含数组的对象时最简单的解决方案。
样本:
import com.google.gson.Gson;
Object a = // ...;
Object b = //...;
String objectString1 = new Gson().toJson(a);
String objectString2 = new Gson().toJson(b);
if(objectString1.equals(objectString2)){
//do this
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
363564 次 |
| 最近记录: |