公共静态final类变量中的不同句柄

时间:2013-08-14 08:54:31

标签: java

我有用于模拟java 1.4的枚举行为的clas

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");
        }
    }
}

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

1 个答案:

答案 0 :(得分:0)

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

if (p == PacketType.StartOfOperation)

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

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

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

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