2010-08-30 229 views
3

我正在编写一个应该关闭控制台的程序,如果用户输入字符串“end” 即使用户输入“end”,程序也会执行else循环我想知道为什么程序没有进入循环的一部分,如果和关闭。Java扫描器类

Scanner scan = new Scanner(System.in); 
while(true) 
{ 
    String num = scan.nextLine(); 

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

重复? http://stackoverflow.com/questions/1530864/java-why-doesnt-my-string-comparison-work,http://stackoverflow.com/questions/995918/java-string-comparison,http:// stackoverflow。 com/questions/658953/java-if-statement-with-string-comparison-fails,... – 2010-09-01 14:48:26

回答

7

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

+3

要扩大一点,num是一个对象。 ==表达式询问num是否与常量“end”是同一个对象,当然这不是。 – 2010-08-30 22:32:46

0

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

0

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

1

在Java中,测试与字符串的平等:

string1.equals(string2); 

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

num.equals("end"); 

或避免NullPointerException类型的异常:

"end".equals(num); 
5

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

使用num.equals(“结束”)或num.equalsIgnoreCase(“结束”),如果你希望能够输入端部或端面

我不会用“结束” .equals(NUM)尽管在大多数情况下从性能的角度来看它更好,但它没有明确说明业务需求,更重要的是使其更具可读性。如果可能的话num.quals(“end”)可能会抛出一个异常,你应该写if(num!= null)& & num.equals(“end”)) {...}

注意,“结束” .equals(NUM)不需要空检查,但我还是相信这不是很有可读性,所以我会用,如果(NUM去!= NULL & & NUM .equals(“end”)){...}