【问题标题】:Java Scanner Class [duplicate]Java 扫描程序类 [重复]
【发布时间】:2011-04-06 00:05:37
【问题描述】:

我正在编写一个程序,如果用户输入字符串“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");
  }
 }

【问题讨论】:

标签: java


【解决方案1】:

在 Java 中,您可以通过以下方式测试字符串的相等性:

string1.equals(string2);

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

num.equals("end");

或者为了避免NullPointerException类型的异常:

"end".equals(num);

【讨论】:

    【解决方案2】:

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

    如果您希望能够输入 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) 不需要 null 检查,但我仍然认为这不是很可读,所以我会选择 if (num!=null && num.equals("end") ) { ... }

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            您使用的是== 而不是"end".equals(num)

            【讨论】:

            • 扩大一点,num是一个对象。 == 表达式询问 num 是否与常量“end”是同一个对象,当然不是。
            猜你喜欢
            • 2013-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-01
            • 2010-12-31
            • 1970-01-01
            • 2012-05-20
            相关资源
            最近更新 更多