与Java .equals()方法相反?

use*_*514 2 java conditional-statements

我正在尝试使用do-while循环在Java中编写一小段代码,询问用户的名字.如果它不是代码所寻找的名称,那么它只是重复自己.例如,

Scanner scan = new Scanner();
do { 
   System.out.println("whats your name?"); 
   String name = scan.nextLine(); 
} while ("jack".equals(name));  ////// <<<<
Run Code Online (Sandbox Code Playgroud)

这是我标记的地方<<<<,我不知道该怎么做.我需要类似的东西!=,但这不适用于字符串.

那么我可以放在这里呢?

Mik*_*hie 9

感叹号!代表否定或赞美.while(!"jack".equals(name)){ }


Ale*_*den 5

布尔不!操作员是最干净的方法。当然你也可以说

if ("jack".equals(name) == false) { ... }
Run Code Online (Sandbox Code Playgroud)

或者你可以说

if ("jack".equals(name) != true) { ... }
Run Code Online (Sandbox Code Playgroud)

当心如果调用.equals()可能是的对象,null或者您会得到NullPointerException。在这种情况下,类似...

if !((myVar == yourVar) || ((yourVar != null) && yourVar.equals(myVar))) { ... } 
Run Code Online (Sandbox Code Playgroud)

...将防范的NullPointerException,如果他们没有平等的,包括他们两人不是是真的null。相当令人不安吗?我认为逻辑是合理的,即使很难看。这就是为什么我StringUtil在许多项目中编写包含此逻辑的类的原因!

这就是为什么.equals()在字符串文字而不是要测试的字符串上调用该方法是更好的约定的原因。