跳过Java if语句

时间:2011-09-06 11:22:26

标签: java

在以下Java代码中,if语句条件不会计算为true,并且会跳过其块。

public void options(String input)
{
    if(input == "x")
        System.exit(0);
}

输入具有正确的值,为什么会跳过System.exit(0)?

7 个答案:

答案 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)

使用==比较基元和对象引用。

等于内容比较(假设已实施)。字符串具有为内容比较而实现的等号,您应该使用它。