【问题标题】:Java Does Not Equal (!=) Not Working? [duplicate]Java 不等于 (!=) 不工作? [复制]
【发布时间】:2012-01-19 01:23:35
【问题描述】:

这是我的代码 sn-p:

public void joinRoom(String room) throws MulticasterJoinException {
  String statusCheck = this.transmit("room", "join", room + "," + this.groupMax + "," + this.uniqueID);

  if (statusCheck != "success") {
    throw new MulticasterJoinException(statusCheck, this.PAppletRef);
  }
}

但是由于某种原因,if (statusCheck != "success") 正在返回 false,从而抛出 MulticasterJoinException

【问题讨论】:

  • SO 应该开始检测这个问题并自行回答。
  • 我在标题中输入的建议中没有看到这个问题的答案,所以我认为它是独一无二的。猜不...
  • @KublaiKhan,我在采访中问了这个问题(String 平等)。 == 什么时候起作用,什么时候不起作用(以及如何让它再次起作用),通常没有人可以回答。

标签: java


【解决方案1】:

请使用!statusCheck.equals("success") 而不是!=

Here 是更多细节。

【讨论】:

  • 实际上,@anubhava 和 SubOP 都错了。如果可以的话,永远不要将nullable 对象放在equals(Object) 方法中。应该是!"success".equals(statusCheck)。否则,如果statusCheck == null,您可以获得 NPE
【解决方案2】:

比较字符串时需要使用 equals() 方法,否则您只是在比较对象引用,所以在您的情况下,您需要:

if (!statusCheck.equals("success")) {

【讨论】:

  • 等于,不等于。
  • 更好的是检查!"success".equals(statusCheck),以防statusCheck为空,不会抛出NullPointerException
【解决方案3】:
if (!"success".equals(statusCheck))

【讨论】:

  • 请注意,Peter 如何使用 !"success".equals(statusCheck) 而不是 !statusCheck.equals("success")。这样,如果 statusCheck 为 null,您可以避免 NullPointerException。
  • 我建议你也看看“*.equalsIgnoreCase(string)”,以确保一切正常。
【解决方案4】:

==!= 处理对象标识。虽然这两个Strings 具有相同的值,但它们实际上是两个不同的对象。

请改用!"success".equals(statusCheck)

【讨论】:

  • 这比公认的答案更好,因为它给出了解释。
【解决方案5】:

做其中之一。

   if(!statusCheck.equals("success"))
    {
        //do something
    }

      or

    if(!"success".equals(statusCheck))
    {
        //do something
    }

【讨论】:

  • 这两个条件有什么区别?
  • 错了!你千万不要那样做! (我的意思是,第一个)。为什么?如果statusCheck==null,那么你会遇到NPE。在第二个示例中,您只会得到 false 是 statusCheck 为空。 @AlicanBalik
【解决方案6】:

当然,如果你想随波逐流,你可以使用equals,但如果你真的想让你的程序员同行惊叹不已,请像这样检查不等式:

if ("success" != statusCheck.intern())

intern 方法是标准 Java String API 的一部分。

【讨论】:

  • +1 来自我。虽然我不希望在我必须维护的代码库中看到这个习语,但了解什么是 intern() 以及它是如何工作的肯定很有用。 (使用 Google Guava 的 Interner 使这些内容更加明确)
  • 四年后我意识到我应该说我永远不会在“真实”代码中使用它,我也不建议其他人这样做。可能存在一些边缘情况,即实习字符串可以稍微提高性能,但我的回答的重点是教育和娱乐。
  • 即使假设阅读代码的人知道“Intern()”是做什么的,他们仍然会对它为什么存在感到困惑,因为他们会试图弄清楚为什么 它被使用了。
  • @Tasgall,我同意 - 如果需要 intern(),那么可以肯定地说代码应该有据可查。
【解决方案7】:

您可以使用 equals() 方法来满足您的需求。 ==在java编程语言中有不同的含义!

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多