我有用于模拟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");
}
}
}
现在我需要知道哪个值有变量p
。 equals
和==
都通过主函数检查。但是,如果我的应用程序中有多个线程,它不会通过此检查。我为所有PacketType.StartOfOperation
变量分配了相同的静态变量PacketType
。调试器显示我具有相同的值,但不是相同的变量处理程序(这就是它不通过equal
和==
的原因)。我希望它应该具有相同的句柄。为什么它表现得那么奇怪?
答案 0 :(得分:0)
使用==
时,如果两个引用都指向同一个对象,则返回true。
if (p == PacketType.StartOfOperation)
这里两个引用都指向不同的对象,因此它不会执行。试试这个
PacketType p =PacketType.None;
PacketType p1 =PacketType.None;
if (p == p1)
{
System.out.print("=="); //prints ==
}
由于None是静态的,因此每个引用都指向同一个对象,而==
将返回true。