我正在写一个程序,如果用户输入字符串"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");
}
}发布于 2010-08-31 06:30:09
您正在使用==而不是"end".equals(num)
发布于 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")) { ... }
发布于 2010-08-31 06:31:29
为了测试字符串之间的相等性,您应该改用equals()。
if(a.equals(b))等等。
这应该会对您有所帮助:http://leepoint.net/notes-java/data/expressions/22compareobjects.html
https://stackoverflow.com/questions/3604692
复制相似问题