在以下Java代码中,if语句条件不会计算为true,并且会跳过其块。
public void options(String input)
{
if(input == "x")
System.exit(0);
}
输入具有正确的值,为什么会跳过System.exit(0)?
答案 0 :(得分:12)
您正在比较 identity 的两个字符串引用,而不是它们是否引用相等的字符串。它不是跳过 if
语句 - 它正在评估条件,并发现它是错误的,所以它不会进入正文。试试这个:
if (input.equals("x"))
或者如果input
可能为null并且您不希望它导致异常:
if ("x".equals(input))
这不仅仅是字符串 - 只要你有==
,它就会比较两个表达式的值......如果这些值是引用,它只是比较这两个引用是否相等,即他们是否引用同一个对象。另一方面,equals
以多态方式应用 - 因此调用它的对象可以确定该类的相等性。
另一个例子:
Integer x = new Integer(1000);
Integer y = new Integer(1000);
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
答案 1 :(得分:6)
这是经典之作。不要使用“==”来比较字符串,请使用String.equals()。
答案 2 :(得分:2)
尝试使用
"x".equals(input)
==
测试它们是否引用相同的对象而不是字符串的内容。
答案 3 :(得分:1)
请勿使用==
来比较字符串,请使用equals
。
if(input.equals("x"))
System.exit(0);
答案 4 :(得分:1)
试试"X".equals(input)
。对于String比较,使用equals方法。
答案 5 :(得分:0)
您需要使用.equals()
,而不是==
。
使用==
将总是失败:与javascript不同,在java ==
中测试两个操作数是否是相同的对象,不是(一个是String常量,另一个是用户输入)
.equals()
测试两个对象是否“具有相同的值”(依赖于类的实现)。
答案 6 :(得分:0)
使用==比较基元和对象引用。
等于内容比较(假设已实施)。字符串具有为内容比较而实现的等号,您应该使用它。