首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Scanner类

Java Scanner类
EN

Stack Overflow用户
提问于 2010-08-31 06:26:15
回答 6查看 287关注 0票数 3

我正在写一个程序,如果用户输入字符串"end“,应该关闭控制台。即使用户输入”end“,程序也总是执行else循环。我想知道为什么程序没有进入循环的if部分并关闭。

代码语言:javascript
复制
Scanner scan = new Scanner(System.in);
 while(true)
 {
  String num = scan.nextLine();

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

回答 6

Stack Overflow用户

发布于 2010-08-31 06:30:09

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

票数 7
EN

Stack Overflow用户

发布于 2010-08-31 07:42:41

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

如果希望能够键入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")) { ... }

票数 5
EN

Stack Overflow用户

发布于 2010-08-31 06:31:29

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

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

这应该会对您有所帮助:http://leepoint.net/notes-java/data/expressions/22compareobjects.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3604692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档