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が渡されません==
)。同じハンドルを持つ必要があると思います。なぜそれはとても奇妙に振る舞うのですか?