当前位置: 首页 > 面试题库 >

在Java中对字符串和对象使用equals()方法

岑俊弼
2023-03-14
问题内容

Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));

它返回falsetrue如果删除了注释,则可以返回。

为什么同一件事不适用于该String班级?

String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));

它返回true。为什么?(因为String使用实习生或其他涉及的东西?)


问题答案:

因为
String的equals()
比较内容,而不是对象本身。

公共布尔等于(Object anObject)

将此字符串与指定对象进行比较。当且仅当参数不为null且该String对象表示与此对象相同的字符序列时,结果为true 。

    /* String.equals() */
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

(链接到String.equals()的源)


等于Object相等

类的equals方法Object在对象上实现了最有区别的对等关系。也就是说,对于任何非空引用值xy,当且仅当xy引用同一对象(x == y具有值true)时,此方法返回true 。

/* Object.equals() */
public boolean equals(Object obj) {
    return (this == obj);
}

(链接到Object.equals()的源)

另外,请不要忘记equals()函数的约定:

equals方法对非null对象引用实现对等关系:

  • 这是 自反的 :对于任何非null的参考值xx.equals(x)应返回true。
  • 它是 对称的
    :对于任何非空引用值xyx.equals(y)当且仅当y.equals(x)返回true时,才应返回true。
  • 它是 传递
    性:对于任何非空的参考值xy以及z,如果x.equals(y)回报率truey.equals(z)回报率true,那么x.equals(z)应该返回true
  • 它是 一致的
    :对于任何非null的引用值x和,只要不修改对象的equals比较中使用的信息y,就可以多次调用x.equals(y)一致返回true或一致返回false
  • 对于任何非null的参考值xx.equals(null)应返回false


 类似资料:
  • 问题内容: 出于好奇,我尝试了这个例子。 输出为“字符串”。我想知道JVM决定在什么基础上调用以String作为参数而不是Object的方法。 问题答案: 只要可以将多个重载方法应用于参数列表,就会使用最具体的方法。 在这种情况下,传递时都可以调用这两种方法,因为“空类型”既可以分配给也可以分配给。采取的方法更加具体,因此将被选择。

  • 我在做一个作业,我得到了下面这个问题。 使用方法创建的字符串对象存储在内存中的哪里? 在恒定池中 在堆上(新操作员对象的区域)

  • 问题内容: 谁能从此链接http://www.javatpoint.com/corejava-interview- questions-3 解释问题87和89 87)在下面的代码中将创建多少个对象? 答案是:只有一个物体 89)在下面的代码中将创建多少个对象? 答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中。 问题答案: 尽管是用Java编写的类,但它是一种与JVM有特殊关系的特殊类

  • 问题内容: 我建立了一个领域的课程。然后,我创建了两个对象,我也必须使用运算符对其进行比较。这是我所做的: 问题答案: 比较对象引用,它检查两个操作数是否指向同一对象(不是等效对象,是同一对象)。 如果要比较字符串(以查看它们是否包含相同的字符),则需要使用来比较字符串。 在你的情况下,如果字符串匹配,则确实将两个居中实例视为相等,则: …但是通常,如果你要定义一个类,那么等效性要比单个字段的等效

  • 问题内容: 之间有什么区别 和 问题答案: 当你使用字符串文字时,可以将字符串嵌入,但是当你使用时,你将获得一个新的字符串对象。 在此示例中,两个字符串文字均引用相同的对象: 在这里,创建了2个不同的对象,它们具有不同的引用: 通常,应尽可能使用字符串文字表示法。它更易于阅读,并且为编译器提供了优化代码的机会。