我有这个
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"不知何故?
答案 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(); }
因为你总是知道常量字符串不会为空。