0

我有模拟 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");
        }
    }
}

现在我需要知道哪个值有变量p。两者 ,equals==在 main 函数中通过检查。但如果我的应用程序中有多个线程,它不会通过此检查。我PacketType.StartOfOperation为所有变量分配了相同的静态PacketType变量。调试器显示我具有相同的值,但变量处理程序不同(这就是它不通过equaland的原因==)。我希望它应该有相同的句柄。为什么它的行为如此奇怪?

4

1 回答 1

0

当您使用==它时,如果两个引用都指向同一个对象,则返回 true。

if (p == PacketType.StartOfOperation)

这里两个引用都指向不同的对象,因此它不会执行。尝试这个

 PacketType p =PacketType.None;
 PacketType p1 =PacketType.None;   

    if (p == p1)
    {
    System.out.print("=="); //prints ==
    }

由于 None 是静态的,因此每个引用都指向同一个对象==并将返回 true。

于 2013-08-14T09:38:13.547 回答