Java 1.4 の列挙型動作をエミュレートするクラスがあります。
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.StartOfOperation;
if (p == PacketType.StartOfOperation) {
System.out.print("==");
}
if (p.equals(PacketType.StartOfOperation) ) {
System.out.print("equals");
}
}
}
次に、どの値が variable を持つかを知る必要がありますp。両方とも、メイン関数でチェックを渡しますequals。==しかし、アプリケーションに複数のスレッドがある場合、このチェックに合格しません。PacketType.StartOfOperationすべての変数に同じ静的変数を割り当てましたPacketType。equalデバッガーは、私が同じ値を持っていることを示していますが、同じ変数ハンドラーは持っていません (そのため、 andが渡されません==)。同じハンドルを持つ必要があると思います。なぜそれはとても奇妙に振る舞うのですか?