【问题标题】:Java if statement is skippedJava if 语句被跳过
【发布时间】:2011-09-06 11:22:25
【问题描述】:

在以下 Java 代码中,条件 if 语句的计算结果不为真,因此跳过其块。

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

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

【问题讨论】:

  • 是否跳过 if 语句或将条件评估为 false 并跳过 System.exit(0); ?
  • 我会为每个答案投票。我们基本上都说了同样的话:)

标签: java


【解决方案1】:

您正在比较 identity 的两个字符串引用,而不是它们是否引用 equal 字符串。它不是跳过 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

【讨论】:

    【解决方案2】:

    这是经典。不要使用“==”来比较字符串,使用 String.equals()。

    【讨论】:

    • 我不确定为什么这个答案在我添加此评论时获得了唯一的选票,而它没有提供任何为什么的解释 @987654321 @ 不起作用。
    • 我同意这一点,事实上。我应该解释得更多。
    • 对琐碎问题的答案投票没有意义
    【解决方案3】:

    尝试使用

    "x".equals(input)
    

    == 测试它们是否引用同一个对象而不是字符串的内容。

    【讨论】:

      【解决方案4】:

      不要使用==比较字符串,使用equals

      if(input.equals("x"))
          System.exit(0);
      

      【讨论】:

        【解决方案5】:

        试试"X".equals(input)。对于字符串比较,使用 equals 方法。

        【讨论】:

          【解决方案6】:

          您需要使用.equals(),而不是==

          使用==总是 失败:与javascript 不同,在java 中== 测试两个操作数是否完全相同的对象,它们不是(一个是字符串常量,另一个是用户输入)

          .equals() 测试两个对象是否“具有相同的值”(依赖于类的实现)。

          【讨论】:

            【解决方案7】:

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

            等于内容比较(如果已实现)。 String 为内容比较实现了等号,你应该使用它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-09
              • 1970-01-01
              • 1970-01-01
              • 2017-08-25
              • 1970-01-01
              相关资源
              最近更新 更多