【问题标题】:Basic comparison always returns false基本比较总是返回 false
【发布时间】:2014-04-03 10:33:22
【问题描述】:

我有一个如下所示的类定义。我希望它是一个单身人士。

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)。

【问题讨论】:

  • 您使用的是什么版本的 intellij?我无法在 v13.x 中重现这个
  • 我看不到任何错误。这两个条件都对我来说是真实的。
  • 你确定这是初始化“public int myProperty = 0;”的正确方法吗? ??并且还有一个私有构造函数,否则我想知道它怎么会是一个单例。实现 clone 方法并返回 null 以确保生成的对象不可克隆
  • 哪个 Java 版本使用您的 IDE?
  • @SanyamGoel 只要他不尝试使用 new 而不是 MyClass.get 来获取 MyClass 的实例,它将作为单例工作,但确实将构造函数设为私有使其成为不可能。跨度>

标签: java intellij-idea static-members


【解决方案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

【讨论】:

  • 嗯,这似乎是一个错误,与您链接的相似但不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多