equals方法:
一 Object中的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
二 像String,Date等核心类库基本上都重写了equals方法,用来比较内容。
三 自定义类如果没重写equals方法那么调用的是Object中的equals方法用来比较内容。
但是我们自定义类的时候通常都会重写equals方法,用来比较内容.
[面试题] == 和 equals的区别是什么?
== :
基本数据类型,比较的是具体的内容是否相等。
引用数据类型,比较的是地址值是否相等。(两个变量指向的是否是同一个对象)
equals :
如果没重写Object中的方法比的是地址值
如果重写了equals方法那么通常比较的是内容
package com.atguigu.java3;
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void info() {
System.out.println("name=" + name+ "age=" + age );
}
//重写 equals()
@Override
public boolean equals(Object obj) {
if(this == obj){//如果 是同一个对象内容就一定相同
return true;
}
if (obj instanceof Person){
//向下转型
Person p = (Person) obj;
//比较内容
return (p.age == this.age) && this.name.equals(p.name);
}
return false;
}
}
package com.atguigu.java3;
import java.io.ObjectOutputStream.PutField;
/*
* equals方法
*
*/
public class EqualsTest {
public static void main(String[] args) {
Person person = new Person("aa", 18);
boolean equals = person.equals(person);
System.out.println(equals);
System.out.println("------------------");
System.out.println(3 == 5); //false
System.out.println(3.0 == 3);//true自动类型提升
System.out.println('A' == 65);//true自动类型提升
Person p = person;
System.out.println(p == person);//true
p = new Person("cc", 20);
System.out.println(p == person); //false
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
Person p1 = new Person("cc", 22);
Person p2 = new Person("cc", 22);
System.out.println(p1.equals(p2)); //true
}
}
自动重写equals的快捷键