繁体   English   中英

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

[英]different handles in public static final class variable

我有模拟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变量分配了相同的静态变量PacketType.StartOfOperation 调试器显示我具有相同的值,但没有相同的变量处理程序(这就是为什么它不传递equal== )。 我希望它应该具有相同的句柄。 为什么它表现得如此奇怪?

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

if (p == PacketType.StartOfOperation)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM