【问题标题】:Identical strings comparison gives me false [duplicate]相同的字符串比较给了我错误[重复]
【发布时间】:2010-10-06 15:55:34
【问题描述】:

我有两个相同的字符串,一个在数组中,一个在字符串变量中。当我比较这些相同的字符串时,我每次都会得到错误。我调试和调试过,但每次都得到相同的结果。这是有问题的代码

String temp = ""+(num1*num2);
Boolean equal = temp == answers[i];

if(equal) {
    correct[i] = true;
    num_correct ++;
}else{
    correct[i] = false;
}

再一次,我已经调试了这个程序的每一个小细节,我 101% 确定字符串是相同的。为什么 Java 在比较时返回 false?

【问题讨论】:

  • 你为什么使用 Boolean(java 类)而不是原生 boolean 类型?另外,为什么使用 == 运算符而不是 equals() 方法?
  • 我们需要一个前十名的常见问题解答列表,== 而不是 equals 总是出现。
  • @Steve Kuo 这是个好主意。如果它还没有,应该在 meta 上建议它。
  • 你为什么要-1我! == 适用于我遇到的每种编程语言中的字符串。我什至没有想到它不起作用的可能性,许多其他程序员也没有想到。

标签: java arrays string comparison


【解决方案1】:

当您在 Java 中对对象使用 == 运算符时,您是在尝试比较对象引用。也就是说,该对象句柄是否与该其他对象句柄指向完全相同的对象。除非字符串被保留,否则这是行不通的。

改用String.equals(Object)

Boolean equal = temp.equals(answers[i]);

【讨论】:

  • 没有必要用Boolean代替boolean
  • 只是说明它在 OP 中找到。如果是我的,我会使用final boolean
【解决方案2】:

您正在进行参考比较,而不是价值比较。当您使用 == 运算符时,它会检查引用是否相等,而它们不相等。如果要检查值是否相等,请使用equals 方法。

boolean equal = temp.equals(answers[i]);

【讨论】:

    【解决方案3】:

    == 在java中的字符串是比较看看它们是否是同一个对象,而不是同一个字符串值。您应该使用 .equals 来比较值。 == 有时会起作用,因为即使通过相同的文字单独创建字符串,字符串也可以通过引用来引用并引用同一对象(因此字符串 b = "Hey" 和字符串 c = "Hey" 最终在后台成为同一个对象因为“嘿”被困在一个隐藏的字符串对象上)。

    【讨论】:

      【解决方案4】:

      正如其他人所表明的那样,您应该使用equals

      但我也会使用布尔对象的booleanValue

      这是您正确完成的代码

      String temp = ""+(num1*num2);
      Boolean equal = temp.equals(answers[i]);
      
      if(equal.booleanValue()) {
          correct[i] = true;
          num_correct ++;
      }else{
          correct[i] = false;
      }
      

      【讨论】:

      • 可能是因为使用 Boolean.booleanValue 比 boolean 复杂得多。
      • 无论如何它都会被拆箱为原始布尔值
      • 我不是使用布尔值的人。我只是使用与 OP 相同的代码,但对其进行了改进
      • @David: (un)拳击很贵
      • 这就是他应该使用布尔值的原因。但是您不会从调用 booleanValue 中获得任何东西(除了更长的代码),因为无论如何 Java 5+ 编译器都会为您插入。开销来自使用引用类型而不是原语。
      【解决方案5】:

      这有帮助吗?

      Boolean equal = (temp == answers[i]);
      

      我不确定这是否会成为问题,但我总是将我的条件括在括号中。

      【讨论】:

      • -1 完全忽略了问题
      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2014-11-28
      相关资源
      最近更新 更多