1,对于基本数据类型
==比较值是否相等,因为基本类型不是对象,所以没有equals方法。
2,对象
==作用于引用类型的变量时,则比较的是所指向的对象的地址。
equals()是从Object类中继承过来的。
equals()方法在Object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
可以看出最初的equals方法与==作用相同,都是判断引用类型的变量所指向的对象的地址是否相同。(即是否为同一引用)
所以要对equals方法进行重写覆盖用于比较两个对象所存储的内容是否相等
代码示例:
public class Equals {
public static void main(String[] args) {
Student s1=new Student(1,"Tom");
Student s2=new Student(1,"Tom");
System.out.println((s1==s2)?"true":"false");
System.out.println((s1.equals(s2))?"true":"false");
}
}
class Student {
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
运行结果:false
false
重写覆盖equals后:
public class Equals {
public static void main(String[] args) {
Student s1=new Student(1,"Tom");
Student s2=new Student(1,"Tom");
System.out.println((s1==s2)?"true":"false");
System.out.println((s1.equals(s2))?"true":"false");
}
}
class Student {
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
运行结果:false
true
注:
New出来的对象都是重新分配内存地址;
String,Double,Date,Integer等都对equals方法已经进行了重写用来比较指向的对象所存储的内容是否相等