equals()与==的区别?
在Java中,equals()
和==
运算符用于比较对象,但它们的工作方式有显著差异:
-
==
:这是一个二进制运算符,用于比较原始数据类型的值或比较对象引用。当用于对象时,==
检查两个引用是否指向内存中的同一位置。 -
equals()
:这是Object类中定义的方法,用于比较两个对象的内容或值。默认情况下,equals()
的行为与==
相同,即比较对象引用。但它通常被重写以实现更复杂的比较逻辑,例如在String类中比较两个字符串的值。
因此,选择使用==
或equals()
取决于你是否需要比较对象的身份(它们是否是同一个对象)还是比较对象的等价性(它们是否“相等”)。
举个例子来说明equals()
和==
的区别:
假设我们有两个String对象:
String s1 = new String("hello");
String s2 = new String("hello");
在这种情况下,s1 == s2
将返回false
,因为s1
和s2
指向内存中的两个不同位置,即它们是两个不同的对象实例。
但是,如果我们使用s1.equals(s2)
,它将返回true
。这是因为String类重写了Object类的equals()
方法,使其比较字符串的值而不是引用。所以即使s1
和s2
是两个不同的对象,由于它们的内容相同,equals()
方法认为它们是“相等的”。
这个例子展示了如何使用==
来检查两个对象是否相同(在内存中占据同一位置),而equals()
用于比较两个对象的值或内容。
更多关于equals()
和==
的例子来帮助理解它们的区别:
-
比较自定义对象:
class Person { String name; Person(String name) { this.name = name; } } Person p1 = new Person("Alice"); Person p2 = new Person("Alice");
在这个例子中,
p1 == p2
将返回false
,因为它们是两个不同的对象实例。如果equals()
方法没有被重写,则p1.equals(p2)
也会返回false
。如果重写了equals()
方法以比较name
属性,则p1.equals(p2)
可能返回true
。 -
比较数组:
int[] a1 = {1, 2, 3}; int[] a2 = {1, 2, 3};
在这个例子中,
a1 == a2
将返回false
,因为它们是不同的数组对象。数组没有重写equals()
方法,所以a1.equals(a2)
也会返回false
。 -
使用包装类:
Integer i1 = 100; Integer i2 = 100;
在这个例子中,
i1 == i2
可能返回true
或false
,取决于值的大小和Java的整数缓存机制。但是i1.equals(i2)
将始终返回true
,因为Integer
类重写了equals()
方法以比较数值。
这些例子展示了==
用于比较对象引用,而equals()
通常用于比较对象的值。不同类型的对象和情况下,这两者的行为可能有很大差异。
原文地址:https://blog.csdn.net/m0_54187478/article/details/135768538
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!