基本比较总是返回false

时间:2014-04-03 10:33:23

标签: 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= new MyClass();
        }
        return sInstance;
    }
}

使用它时,JetBrains IdeaJ警告我,比较总是返回false ...

MyClass myClass = MyClass.get();
if (myClass.myProperty == MyClass.STATUS_CONSTANT) {
    ...
}

...然而,如果我这样做的话,它并没有说是anthing:

if (MyClass.get().myProperty == MyClass.STATUS_CONSTANT)

我不明白为什么它对第一种方法感到生气!?在任何一种方式中,它应该引用相同的静态字段(sInstance)。

1 个答案:

答案 0 :(得分:1)

我无法看到您的情况有任何问题,所以我将您的代码复制到NetBeans项目中,我没有得到任何类似的提醒,所以我决定运行您的代码:

MyClass myClass = MyClass.get();
if (myClass.myProperty == MyClass.STATUS_CONSTANT) {
    System.out.println("OK");
}

它打印" OK"所以有条件不是假的。

我可以看到在"总是错误的情况下有一些报道的错误" IntelliJ检查器:

http://youtrack.jetbrains.com/issue/IDEA-91390