Java扫描程序类

时间:2010-08-30 22:26:15

标签: java

如果用户输入字符串“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");
  }
 }

6 个答案:

答案 0 :(得分:7)

您使用==代替"end".equals(num)

答案 1 :(得分:5)

不要使用==表示字符串的相等性,因为它比较的是对象而不是字符串本身。

如果您希望能够键入end或END

,请使用num.equals(“end”)或num.equalsIgnoreCase(“end”)

我不会使用“end”.equals(num),虽然从大多数情况下从性能角度考虑更好,但它没有明确说明业务需求,更重要的是使其更具可读性。

但要注意num为null,如果可能的话,num.quals(“end”)可能抛出异常,你应该写if(num!= null&& num.equals(“end”) ){...}

请注意,“end”.equals(num)不需要空检查,但我仍然认为这不是非常易读,所以我会选择if(num!= null&& num.equals(“结束“)){...}

答案 2 :(得分:2)

为了测试字符串之间的相等性,您应该使用equals()代替。

if(a.equals(b))等等。

这可以帮助你:http://leepoint.net/notes-java/data/expressions/22compareobjects.html

答案 3 :(得分:1)

在Java中,使用以下命令测试字符串的相等性:

string1.equals(string2);

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

num.equals("end");

或者避免类型NullPointerException的异常:

"end".equals(num);

答案 4 :(得分:0)

num指的是对象,所以num ==“end”永远不应该。你想要num.equals(“结束”)

答案 5 :(得分:0)

在比较Java中的对象时,请不要使用比较(==)运算符。改为使用equals(Object)。