您现在的位置是:java学习笔记 >
java学习笔记
java中==和equals()的区别
本 文 目 录
# H2: Java中==和equals()的区别
在Java编程语言中,"=="与equals()方法都可用于比较对象,但它们在功能、应用场景和行为上存在显著区别。"=="主要用于比较基本数据类型和引用类型的引用地址是否相同,而equals()则主要针对对象内容的比较,尤其在String类和其他自定义类中扮演重要角色。
一、"=="操作符的使用
步骤1:基本类型比较
"=="用于比较基本数据类型(如int, char, boolean等)时,它检查的是两个变量是否存储相同的值。例如:
int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true
上述代码中,a和b存储的都是整数值5,因此"a == b"的结果为true。
步骤2:引用类型比较
对于引用类型(如String, Integer等对象),"=="比较的是对象的引用地址,即判断两个引用是否指向内存中的同一个对象实例。
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1 == s2); // 输出:false
此处,s1和s2虽然内容相同,但由于它们分别创建了不同的对象实例,因此"s1 == s2"的结果为false。
二、equals()方法的使用
步骤3:equals()方法基础
equals()是Object类的一个方法,所有Java类默认继承这个方法。对于非String的基本对象包装类,如果不重写equals(),其行为与"=="对引用类型的操作一致。但在String类中,equals()方法被重写以实现基于字符串内容的比较。
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1.equals(s2)); // 输出:true
在这个例子中,尽管s1和s2不是同一对象引用,但由于它们的内容相同,所以s1.equals(s2)
返回true。
步骤4:自定义类中的equals()
在自定义类中,通常需要根据业务逻辑重写equals()方法来进行有意义的对象内容比较。
class Person {
String name;
int age;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
Person p1 = new Person("John", 30);
Person p2 = new Person("John", 30);
System.out.println(p1.equals(p2)); // 输出:true
上述代码中,我们重写了Person类的equals()方法,使其能够根据name和age属性的值来判断两个Person对象是否相等。
总结与注意事项:
- "=="操作符在基本类型中比较值,在引用类型中比较对象引用。
- equals()方法默认比较对象引用,但在诸如String类以及自定义类中,通过重写可以实现对象内容的比较。
- 在编写自定义类时,如果需要基于对象属性进行相等性判断,务必重写equals()方法,并同时重写hashCode()方法以保持两者一致性,避免在集合类中出现问题。
完整的示例代码如下:
public class Main {
public static void main(String[] args) {
int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1 == s2); // 输出:false
System.out.println(s1.equals(s2)); // 输出:true
class Person {
String name;
int age;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
}
Person p1 = new Person();
p1.name = "John";
p1.age = 30;
Person p2 = new Person();
p2.name = "John";
p2.age = 30;
System.out.println(p1.equals(p2)); // 输出:true
}
}