Object类的equals方法和重写equals方法
Object类的equals方法
Person类默认继承了object类,所以可以使用0bject类的equals万法
boolean equals(object obj)指示其他某个对象是否与此对象“相等”。object类equals方法的源码;
public booLeaequals( object obj) {
return (this == obj);
}
参数:
object obj:可以传递任意的对象
方法体:
==:比较运算符,返回的就是一个布尔值true,false
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法,所以this就是P1
obj是谁?传递过来的参数p2
this==obj --> p1==p2
默认比较的是地址值
Person
public class Person { private String name; private int age; private String sex; public Person(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public Person() { } 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; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; } }
测试
public static void main(String[] args) { Person p1 = new Person( "马尔扎哈",18,"男"); Person p2 = new Person( "莫扎特" , 18,"男"); p1=p2; System.out.println("p1: "+p1); System.out.println("p2: "+p2); Person p3 = new Person( "钢炮",18,"男"); Person p4 = new Person( "01式-仁德" , 18,"男"); p3=p4; System.out.println("p3: "+p3); System.out.println("p4: "+p4); Person p5 = new Person( "千变",18,"男"); Person p6 = new Person( "雷神索尔" , 18,"男"); p5=p6; System.out.println("p5: "+p5); System.out.println("p6: "+p6); Person p7 = new Person( "绿巨人",18,"男"); Person p8 = new Person( "狼叔" , 18,"男"); p7=p8; System.out.println("p7: "+p7); System.out.println("p8: "+p8); boolean b = p1.equals(p2); System.out.println(b); boolean b1 = p3.equals(p4); System.out.println(b1); boolean b2 = p5.equals(p6); System.out.println(b2); boolean b3 = p7.equals(p8); System.out.println(b3); }
重写Object类的equals方法
object类的equals方法黑认比较的是两个对象的地址值,没有意义
所以我们需要重写equals方法,比较两个对象的属性值(name, age)
ALT+INT

无脑回车即可
这是在Person类里面重写的equals方法
@Override public boolean equals(Object obj) { //增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率 if (obj == this) { return true; } //增加一个判断,传递的参数obj是null,直接返回false,提高程序的效率 if (obj == null) { return false; } //增加一个判断,是Person类型在转换,防止类型转换异常CLasscastException* /l if (obj instanceof Person) { //使用向下转型(强转)把object类型转换为Person Person p = (Person) obj; //比较两个对象的属性;一个是调用方法的this(p1),一个就是p(obj=p2) boolean b = this.name.equals(p.name) && this.age == p.age; return b; //不是Person类型直接返回false } return false; }

浙公网安备 33010602011771号