Java Scanner类

3
我正在编写一个程序,如果用户输入字符串 "end",则应该关闭控制台。但是即使用户输入了 "end",程序始终执行 else 循环。我想知道为什么程序没有进入循环的 if 部分并关闭。
Scanner scan = new Scanner(System.in);
 while(true)
 {
  String num = scan.nextLine();

  if(num == "end")
  {
   System.exit(0);
  }
  else
  {
   System.out.println("hi");
  }
 }

重复的吗?https://dev59.com/m0nSa4cB1Zd3GeqPQK8P,https://dev59.com/K3NA5IYBdhLWcg3wWscA,https://dev59.com/HXRB5IYBdhLWcg3wUV1d,... - user85421
6个回答

8
你正在使用==而不是"end".equals(num)

3
稍微解释一下,num是一个对象。==表达式询问num是否与常量“end”是同一个对象,但显然它们不是同一个对象。 - Hugh Brackett

5
不要使用==来比较字符串的相等性,因为它比较的是对象而不是字符串本身。
如果你想输入end或END,可以使用num.equals("end")或num.equalsIgnoreCase("end")。
我不会使用"end".equals(num),尽管从大多数情况下的性能角度来看更好,但它并没有清楚地说明业务需求,使其更易读更重要。
但要注意num可能为null,如果可能出现这种情况,num.equals("end")可能会抛出异常,你应该写成if (num!=null && num.equals("end")) { ... }。
请注意,“end”.equals(num)不需要空值检查,但我仍然认为这不是很易读,所以我会选择if (num!=null && num.equals("end")) { ... }。

2

1

在Java中,你可以使用以下方式测试字符串的相等性:

string1.equals(string2);

所以在这种情况下,它将是:

num.equals("end");

或者为了避免 NullPointerException 异常:

"end".equals(num);

0

num指的是对象,所以num == "end"永远不应该成立。你应该使用num.equals("end")。


0
请在Java中比较对象时不要使用比较运算符(==),而应该使用equals(Object)方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接