Java 基本比较总是返回false
我有一个如下的类定义。我希望它是一个单身汉Java 基本比较总是返回false,java,intellij-idea,static-members,Java,Intellij Idea,Static Members,我有一个如下的类定义。我希望它是一个单身汉 public class MyClass { public static MyClass sInstance; public static final int STATUS_CONSTANT = 0; public int myProperty = 0; public static MyClass get() { if (sInstance==null) { sInstance=
public class MyClass {
public static MyClass sInstance;
public static final int STATUS_CONSTANT = 0;
public int myProperty = 0;
public static MyClass get() {
if (sInstance==null) {
sInstance= new MyClass();
}
return sInstance;
}
}
使用它时,JetBrains IdeaJ警告我,比较结果总是返回false
MyClass myClass = MyClass.get();
if (myClass.myProperty == MyClass.STATUS_CONSTANT) {
...
}
…然而,如果我这样做,它并没有说什么:
if (MyClass.get().myProperty == MyClass.STATUS_CONSTANT)
我不明白为什么它会对第一种方法生气!?无论哪种方式,它都应该引用相同的静态字段(sInstance)。我看不出您的条件有任何问题,所以我将您的代码复制到了NetBeans项目中,并且没有收到任何类似的警报,所以我决定运行您的代码:
MyClass myClass = MyClass.get();
if (myClass.myProperty == MyClass.STATUS_CONSTANT) {
System.out.println("OK");
}
它会打印“OK”,所以有一个条件不是false的情况
我可以看到“总是错误条件”IntelliJ checker中有一些报告的错误:
您使用的intellij版本是什么?我不能在V13XI中复制这个,看不到任何错误。这两个条件都返回true。您确定这是初始化“public int myProperty=0;”的正确方法吗??还有一个私有构造函数,否则它将如何成为一个单例呢。实现clone方法并返回null,以确保生成的对象不可克隆哪个Java版本使用您的IDE?@SanyamGoel,只要他不尝试使用new而不是MyClass获取MyClass的实例。get它将作为一个单例工作,但确实使构造函数私有化使其不可能。嗯,这似乎是一个bug,与链接的内容类似,但不相同。