目录
一、==和equals的区别
在编程中,equals()
和 ==
是两个经常用于比较对象或值的操作符或方法,但它们之间有着本质的区别,特别是在处理对象时。
(一) ==
操作符
- 基本数据类型(如 int, char, boolean 等):对于基本数据类型,
==
用于比较它们的值是否相等。 - 对象引用:对于对象引用(即对象变量),
==
用于比较两个引用是否指向内存中的同一个对象(即它们的地址是否相同)。如果两个引用指向同一个对象,则==
返回true
;如果它们指向不同的对象,即使这些对象的内容相同,==
也会返回false
。
(二)equals()
方法
equals()
是Object
类的一个方法,所有的 Java 类都继承自Object
类,因此都继承了equals()
方法。默认情况下,equals()
方法的行为与==
相同,即比较两个对象的引用是否相同。- 但是,许多类(如
String
,Integer
等)都重写了equals()
方法,以提供基于对象内容的比较,而不是基于引用的比较。这意味着,即使两个对象不是同一个实例(即它们的引用不同),只要它们的内容相同,equals()
方法也会返回true
。
(三)示例
String str1 = new String("hello");
String str2 = new String("hello");
String str3 = str1;
System.out.println(str1 == str2); // false,因为 str1 和 str2 指向不同的对象
System.out.println(str1.equals(str2)); // true,因为 str1 和 str2 的内容相同
System.out.println(str1 == str3); // true,因为 str1 和 str3 指向同一个对象
System.out.println(str1.equals(str3)); // true,因为 str1 和 str3 的内容也相同(且它们指向同一个对象)
(四)结论
- 当比较基本数据类型时,使用
==
。 - 当比较对象时,如果关心的是两个对象是否指向同一个内存地址,使用
==
。 - 当比较对象时,如果关心的是两个对象的内容是否相同,应该使用
equals()
方法,但前提是该方法已被正确重写以提供基于内容的比较。
文章制作不易,如果有帮助的话,还希望能给个点赞和关注支持一下,谢谢大家!🙏🙏🙏