私は列挙エミュレーションクラスを持っています。メインの p と pp の両方のオブジェクトが合格==
し、equals
テストされています。次の場合、両方のテストに合格します。
p = PacketType.None;
pp = PacketType.None;
場合に備えて、両方とも何も出力しません
p = PacketType.StartOfOperation;
pp = PacketType.None;
equals
methodと operatorで実際に呼び出されるのは何==
ですか? ==
それらのオブジェクトが同じポインターを持っているかどうかを確認する必要があるため、それはパスすべきではないと思います。言い換えると、同じオブジェクトに見えるはずです (この場合はそうではありません)。
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");
}
}
}