Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基本比较总是返回false_Java_Intellij Idea_Static Members - Fatal编程技术网

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,与链接的内容类似,但不相同。