equals() 与 == 的区别是什么?
"==" : 它的作用是判断两个对象的地址是不是相等。即,判断引用是否指向同一个对象;
equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况;
情况1,类没有重写equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2,类重写了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
通过示例比较它们的区别
import java.util.*;
import java.lang.Comparable;
/**
*
*
* @author Nailuo
* 444485888@qq.com
*/
public class EqualsTest{
public static void main(String[] args) {
// 新建2个相同内容的Student对象,
// 再用equals比较它们是否相等
Student s1 = new Student("nailuo", 100);
Student s2 = new Student("nailuo", 100);
System.out.printf("s1.equals(s2) : %s\n", s1.equals(s2));
System.out.printf("s1==s2 : %s\n", s1==s2);
}
/**
* Student类。
*/
private static class Student{
int age;
String name;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " - " +age;
}
/**
* 重写equals方法
*/
@Override
public boolean equals(Object obj){
if(obj == null){
return false;
}
//如果是同一个对象返回true,反之返回false
if(this == obj){
return true;
}
//判断是否类型相同
if(this.getClass() != obj.getClass()){
return false;
}
Student student= (Student)obj;
return name.equals(student.name) && age==student.age;
}
}
}
运行结果:
s1.equals(s2) : true
s1==s2 : false
在EqualsTest.java 中:
1 s1.equals(s2) : 这是判断s1和s2的内容是否相等。因为Student重写equals()方法,而这个equals()是用来判断s1和s2的内容是否相等,s1和s2的内容相等;因此,返回true。
2 s1==s2 : 这是判断s1和s2引用(地址)是否指向同一个对象。由于它们是各自新建的两个Student对象,引用不同;因此,返回false。