Java中字符串比较的错误

时间:2015-04-19 03:26:20

标签: java string

我有这个

public void otis() {
    println("What is Otis?");
    String otis = readLine(">");
    println("You said " + otis);
    println(otis);
    println(otis);
    if (otis == "dog"){
        println("you got it right!");
    }
    else {
        println("try it again!");
        otis();
    }
}

但出于某种原因,即使我回应了#34; dog"它没有找到匹配。我可以打印" otis"变量,它说" dog"但显然这并不等同于#34; dog"不知何故?

2 个答案:

答案 0 :(得分:2)

你能试试下面的代码吗? Java不会从两个不同的实例中识别字符串,即使它们的值是等价的。这是因为每个字符串都是一个指针,它们的指针值不相等。尝试使用String.equal方法!

otis.equals( "dog" )

答案 1 :(得分:2)

因为==表示“与内存中的确切对象相同”,所以常量字符串“dog”和从控制台读取的字符串不是同一个对象,即使它们具有相同的内容。在Java中进行比较时,请始终使用.equals()。

作为可能的副作用,在比较Java中可能为null的内容时必须要小心。如果你试图

String dog = null;
if(dog.equals("dog")) { do_something(); }

你最终会得到一个NullPointerException。出于这个原因,许多程序员喜欢比较这样的字符串:

if("dog".equals(dog)) { do_something(); }

因为你总是知道常量字符串不会为空。