[英]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.