您现在的位置是:java学习笔记 >
java学习笔记
java中==和equals的区别示例代码
本 文 目 录
# H2: Java中==和equals的区别示例代码
在Java编程语言中,==
和 equals()
方法都用于比较对象的相等性,但它们在功能和使用场景上有所不同。==
主要用来比较基本数据类型或者引用类型的引用地址是否相同,而 equals()
则主要用于判断对象的内容或值是否相等。
步骤一:理解“==”操作符
“==”操作符比较
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 输出:false
上述代码中,str1
和 str2
分别指向了两个不同的内存区域,虽然它们包含相同的字符串内容,但是通过 ==
比较的是对象的引用地址,因此输出为 false
。
步骤二:理解equals()方法
equals()方法比较
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // 输出:true
在Java中,对于非基本类型的对象(如String类),默认的equals()方法会基于对象的内容进行比较。在上述例子中,尽管str1
和str2
是两个不同的对象,但它们包含相同的字符串内容,因此调用equals()方法时返回 true
。
步骤三:自定义类中equals()方法的重写
equals()方法重写示例
class CustomObject {
private int id;
public CustomObject(int id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
CustomObject that = (CustomObject) obj;
return id == that.id;
}
}
CustomObject obj1 = new CustomObject(1);
CustomObject obj2 = new CustomObject(1);
System.out.println(obj1.equals(obj2)); // 输出:true
在此示例中,我们自定义了一个CustomObject
类并重写了equals()方法,使其根据对象的id属性来判断两个对象是否相等,即使它们位于不同的内存地址。
总结与注意事项
==
通常用于比较基本数据类型(如int, char等)的值是否相等,以及引用类型是否指向同一个内存地址。equals()
方法默认情况下比较的是对象的引用,但在诸如String、Integer等包装类以及自定义类中,一般需要重写equals()方法以便按对象的内容进行比较。- 在编写自定义类时,若需比较对象内容的相等性,请务必按照约定重写equals()方法,并同时重写hashCode()方法以保持一致性,遵循JavaBean规范。
完整代码示例:
public class EqualityDemo {
public static void main(String[] args) {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println("str1 == str2: " + (str1 == str2));
System.out.println("str1.equals(str2): " + str1.equals(str2));
CustomObject obj1 = new CustomObject(1);
CustomObject obj2 = new CustomObject(1);
System.out.println("obj1.equals(obj2): " + obj1.equals(obj2));
}
static class CustomObject {
private int id;
public CustomObject(int id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
CustomObject that = (CustomObject) obj;
return id == that.id;
}
}
}