代码示例1:
public class TestEquals { public static void main(String[] args) { // TestEquals testEquals = new TestEquals(); // testEquals.test1(); //equals(): ①只能处理引用类型变量 ②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等 //java.lang.equals Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1.equals(p2)); //false System.out.println(p1 == p2); //false //像String 包装类 File类 Date类这些类重写Object类的equals()方法,比较的是两个对象的“实体内容”是否完全相同。 String str1 = new String("AA"); String str2 = new String("AA"); System.out.println(str1 == str2); System.out.println(str1.equals(str2)); } public void test1() { //== //1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,反之返回false //注 :两端数据类型可以不同,在不同的情况下,也可以返回true。 //2.引用数据类型:比较引用类型变量的地址值是否相等。 int i = 12; int j = 12; System.out.println(i == j); char c = 12; System.out.println(i == c); float f = 12.0f; System.out.println(i == f); int k = 65; char a = 'A'; System.out.println(k == a); Object o1 = new Object(); Object o2 = new Object(); System.out.println(o1); System.out.println(o2); System.out.println(o1 == o2); Person p1 = new Person(); Person p2 = new Person(); Person p3 = p1; System.out.println(p1 == p2); //false System.out.println(p1 == p3); //true } }
结果:
false
false
false
true
代码示例2:
public class TestEquals2 { public static void main(String[] args) { Person p1 = new Person("AA", 12); Person p2 = new Person("AA", 12); System.out.println(p1 == p2); System.out.println(p1.equals(p2)); } } class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // @Override // public boolean equals(Object obj) { //有缺陷 例如:Student继承了Person 但返回还是true // if (this == obj) { // return true; // } // if (obj instanceof Person) { // Person p = (Person) obj; if (this.name == p.name && this.age == p.age) { return true; } else { return false; } // return this.name.equals(p.name) && this.age == p.age; // } else { // return false; // } // } @Override public boolean equals(Object o) { //IDEA自动生成的equals代码 if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } }
结果:
false
true