Java不等于(!=)不起作用?

Oli*_*ryn 51 java

这是我的代码片段:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

勿绮语*_*勿绮语 166

if (!"success".equals(statusCheck))
Run Code Online (Sandbox Code Playgroud)

  • 请注意Peter如何使用!"success".equals(statusCheck)而不是!statusCheck.equals("success").这样,如果statusCheck为null,则可以避免NullPointerException. (50认同)
  • 我建议您也看一下“*.equalsIgnoreCase(string)”,以确保一切正常。 (2认同)

Pau*_*aul 32

当然,你可以使用,equals如果你想与人群一起,但如果你真的想让你的同事程序员惊奇,请检查这样的不平等:

if ("success" != statusCheck.intern())
Run Code Online (Sandbox Code Playgroud)

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


Jen*_*der 25

==!=致力于对象身份.虽然两者String具有相同的值,但它们实际上是两个不同的对象.

使用!"success".equals(statusCheck)来代替.

  • 这比接受的答案更好,因为它给出了解释。 (2认同)

sub*_*odh 6

做其中一个.

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

      or

    if(!"success".equals(statusCheck))
    {
        //do something
    }
Run Code Online (Sandbox Code Playgroud)

  • **错了!** 你永远不要那样做!(我的意思是,第一个)。为什么?如果`statusCheck==null`,那么你会遇到NPE。在第二个示例中,您只会得到 false 是 statusCheck 为 null。@AlicanBalik (2认同)