"==" : 它的作用是判断两个对象的地址是不是相等。即,判断引用是否指向同一个对象;
equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况;
情况1,类没有重写equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2,类重写了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
通过示例比较它们的区别
import java.util.*;
2 import java.lang.Comparable;
3
4
10 public class EqualsTest{
11
12 public static void main(String[] args) {
13 // 新建2个相同内容的Student对象,
14 // 再用equals比较它们是否相等
15 Student s1 = new Student("eee", 100);
16 Student s2 = new Student("eee", 100);
17 System.out.printf("s1.equals(s2) : %sn", s1.equals(s2));
18 System.out.printf("s1==s2 : %sn", s1==s2);
19 }
20
21
24 private static class Student{
25 int age;
26 String name;
27
28 public Student(String name, int age) {
29 this.name = name;
30 this.age = age;
31 }
32
33 public String toString() {
34 return name + " - " +age;
35 }
36
37
40 @Override
41 public boolean equals(Object obj){
42 if(obj == null){
43 return false;
44 }
45
46 //如果是同一个对象返回true,反之返回false
47 if(this == obj){
48 return true;
49 }
50
51 //判断是否类型相同
52 if(this.getClass() != obj.getClass()){
53 return false;
54 }
55
56 Student student= (Student)obj;
57 return name.equals(student.name) && age==student.age;
58 }
59 }
60 }
运行结果:
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



