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