Java知识速记 == 与equals
Java知识速记 == 与equals
1. ==操作符概述
==
操作符用于比较基本数据类型的值,或者比较引用类型的对象是否指向同一内存地址。对于基本数据类型,例如int、float等,==
会比较其值;但对于对象,==
只会比较两个对象的引用,判断它们是否是同一个对象。
示例:
int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 输出:false
在这个例子中,虽然str1
和str2
内容相同,但它们是不同的对象,因此==
比较返回false
。
2. equals方法概述
equals()
是Java中所有对象的一个方法,定义在Object
类中。默认情况下,equals()
方法和==
操作符的功能相似,比较对象的引用。但可以通过重写equals()
方法来自定义对象的相等性比较。这种重写通常用于判断内容的相等性,例如String
和Integer
等。
示例:
String str3 = new String("Hello");
String str4 = new String("Hello");
System.out.println(str3.equals(str4)); // 输出:true
在这个例子中,由于String
类重写了equals()
方法,所以两个字符串的内容得以比较,返回true
。
3. 结合具体实例的比较
3.1 比较基本数据类型
对于基本数据类型,==
和equals()
是相同的:
int x = 10;
int y = 10;
System.out.println(x == y); // 输出:true
3.2 比较对象引用
对于对象引用,==
只比较内存地址,equals()
如果未重写则比较内存地址:
Integer int1 = new Integer(100);
Integer int2 = new Integer(100);
System.out.println(int1 == int2); // 输出:false
System.out.println(int1.equals(int2)); // 输出:true
虽然这两者的值相同,但是因为它们是在堆内存中不同的对象,==
返回false
,而equals()
返回true
。
3.3 自定义对象的比较
当定义一个自定义类时,重写equals()
方法是判断对象相等性的关键:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = 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("Alice", 30);
Person p2 = new Person("Alice", 30);
System.out.println(p1 == p2); // 输出:false
System.out.println(p1.equals(p2)); // 输出:true
在这个自定义Person
类的例子中,equals()
被重写以比较name
和age
两个属性,使得即使p1
和p2
是不同的引用,它们在逻辑上依然被认为是相等的。