我有枚举仿真类。主p和pp中的两个对象都通过了==
和equals
测试。两种测试均通过,以防万一
p = PacketType.None;
pp = PacketType.None;
两者都不打印任何内容
p = PacketType.StartOfOperation;
pp = PacketType.None;
在方法
equals
和运算符==
中实际上调用了什么?我认为==
不应粘贴,因为必须查看那些对象是否具有相同的指针。换句话说,它应该看起来是同一对象(在我们的情况下不是)。public class PacketType {
String Name = "9";
public static final PacketType None = new PacketType("9");
public static final PacketType StartOfOperation = new PacketType("1");
PacketType(String Name) {
this.Name = Name;
}
public String toString() {
return Name;
}
public static void main(String[] args) {
PacketType p = PacketType.None;
PacketType pp = PacketType.StartOfOperation;
if (p == pp) {
System.out.print("==");
}
if (p.equals(pp)) {
System.out.print("equals");
}
}
}
最佳答案
与对象一起使用==
来测试它们是否是对同一对象实例的引用。应该使用.equals(Object o)
来检查它们是否具有相等的值(但是必须在自定义对象中手动实现此行为,否则默认为==
行为)。
一个很好的例子是使用String
时,人们通常会在尝试检查字符串是否等效时犯下在==
上使用.equals(Object o)
的错误。
String a = "my string";
String b = "my string";
String c = a;
//Each of these should then evaluate to true
a==c
b!=c
a.equals(b)
b.equals(c)
可以在here中找到对
equals(Object o)
方法的完整解释,我找不到等于运算符==
的等效项(This one含糊不清,是指基元而不是对象)。