【问题标题】:== vs .equals - why different behaviour? [duplicate]== vs .equals - 为什么不同的行为? [复制]
【发布时间】:2012-05-10 14:09:45
【问题描述】:

可能重复:
How do I compare strings in Java?

对于这个相当简单的问题,我很抱歉。 我有这个非常简单的 java 程序:

public class ArgIt {
    public static void main(String[] args){
            if(args[0].equals("x")) System.out.print("x");
            if(args[0] == "x") System.out.println("x2 ");
    }
}

如果我调用程序 >java ArgIt x 它只打印一个 x。 为什么程序在任何其他情况下都不会确认字符串上的 ==?

【问题讨论】:

标签: java string-comparison


【解决方案1】:

在 Java 中,您必须使用 equals() 来比较 Strings 之间的相等性。 == 测试身份,这是一个不同的概念。

两个对象可以相等但不相同;另一方面,如果两个对象相同,则暗示它们相等。

如果两个对象在物理上指向内存中的相同地址,则它们是相同的,而如果它们具有相同的值,则两个对象相等,正如程序员在equals() 方法中所定义的那样。一般来说,您更感兴趣的是找出两个对象是否相等。

【讨论】:

  • 那么对于给定的示例,哪个选项是合适的
  • 字符串应该与相等运算符比较相等吗?字符串 x = "X"; x == "X" 应该评估为真。
  • @maress 您的示例恰好按您的预期工作。
  • 一般情况下你应该使用equals()。如果您有兴趣比较引用(最后是内存地址),请仅使用==
【解决方案2】:

== 测试指针相等;.equals 存在以测试值相等。

【讨论】:

    【解决方案3】:

    在 Java 中,与 == 运算符比较会检查身份是否相等,因为引用(在对象的情况下)指向相同的内存位置。因此,应该使用== 运算符只比较基元,因为基元(intlongboolean 等)是按值存储的,而不是按引用存储的。

    简而言之,使用equals 方法比较对象,使用== 运算符比较原语。

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2015-11-18
      • 2016-07-24
      • 2020-05-03
      相关资源
      最近更新 更多