【问题标题】:JAVA - Why a == "1" returns false [duplicate]JAVA - 为什么a ==“1”返回false [重复]
【发布时间】:2012-12-24 03:47:47
【问题描述】:

可能重复:
String is not equal to string?
What makes reference comparison (==) work for some strings in Java?

有人可以按照java代码解释一下吗

String a = "1";
if(a == "1") {
//print compare 1 is true;
} else { 
//print compare 1 is false;
}

if(a.equals("1")) {
//print compare 2 is true;
} else { 
//print compare 2 is false;
}

结果像

compare 1 is false
compare 2 is true

我唯一的解释是它比较内存地址而不是值本身。但我不确定。可以请一些人把它点亮。在 .Net == 运算符被重载以比较字符串的内容。

【问题讨论】:

  • == is 在比较字符串时不起作用,即使它不会产生错误。这适用于 Java 中的任何 object。使用 .equals 会给你一个正确的结果。就这么简单。
  • 我仍然说我们需要一个“这不是你在 Java 中比较字符串的方式”关闭选项。
  • 我不明白否决票是关于什么的。
  • @Marlon - 研究工作,如果您将鼠标悬停在向下投票按钮上,您会看到这是点击它的第一个原因。这在 SO 上已经被回答了数百次,在互联网上已经被回答了数千次。
  • 至少他没有真正尝试过这段代码,因为if (a == "1") 实际上会返回true,他会继续认为这就是你比较 Stings 的方式。

标签: java


【解决方案1】:

使用"1".equals(a),String是一个对象,所以使用equals()来比较

【讨论】:

    【解决方案2】:

    我知道==运算符是比较“它是同一个对象吗?”

    对象a 与常量字符串"1" 不同。

    所以返回假

    【讨论】:

    • 它实际上是同一个对象,并且实际上将评估为true,除非您的 JVM 已损坏且不符合规范。字符串文字被实习,这就是这个问题被反复询问的原因。
    • 感谢纠正我的回答。我的误解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2013-02-25
    • 2019-12-07
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多