簡體   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