Object类的equals方法和Object类的总结

Object类的equals方法

Object equals() 方法用于比较两个对象是否相等。

equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等。

注意:如果子类重写了 equals() 方法,就需要重写 hashCode方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法。

复制代码
    public static void main(String[] args) {
        // String s1 = "abc ";

     //boolean b = s1.equals(s2 );//NuLlPointerException nuLl是不能调用方法的,会抛出空指针异常 \
        // system.out.printLn(b);
        //Object类的equals方法:对两个对象进行比较,防止空指针异常
//        public static boolean equals(Object a, Object b) {
//        return (a == b) || (a != null &8 a.equals));
//        }
        String s1 = null;
        String s2 = "abc" ;
        boolean b2 = Objects.equals(s1,s2);
        System.out.println(b2);

        String s3 = null;
        String s4 = "def" ;
        boolean b = Objects.equals(s3,s4);
        System.out.println(b);

        String s5 = null;
        String s6 = "abc" ;
        boolean b3 = Objects.equals(s5,s6);
        System.out.println(b3);
    } 
复制代码

 

Object类的总结

1.Object类介绍

  object类是所有类的父类。一个类都会直接或者间接的继承自该类该类中提供了一些非常常用的方法!

2.toString()方法

A∶作用

  打印对象的信息

B∶重写前:打印的是包名类名@地址值

C∶重写后︰打印的是对象中的属性值

重写前的

复制代码
//测试
Person p = new Person("张三", 18, "");

        System.out.println(p);

//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;
    }
结果

com.Demo_02.Person@2c63a86d

 
复制代码

重写后

复制代码
//测试      
 Person p = new Person("张三", 18, "");
        String s = p.toString();
        System.out.println(s);
        //直接打印对象的名字,其实就是调用对象的toString方法 p = p.toString( );
       // System.out.println(p);

//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 + '\'' +
                '}';
    }
结果

Person{name='张三', age=18, sex='男'}
复制代码

 

3.equals()方法

A:作用:比较两个对象的

B:重写前:比较的是对象的地址值

C:重写后∶比较的是对象中的属性值

比较两个对象是否相同,但是加了一些健壮性的判断

 

重写前

复制代码
测试
        Person p1 = new Person( "马尔扎哈",18,"");
        Person p2 = new Person( "莫扎特" , 18,"");

        p1=p2;
        System.out.println(p1);
        System.out.println(p2);


        boolean b = p1.equals(p2);
        System.out.println(b);
//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;
    }
结果

com.Demo_02.Person@27716f4
com.Demo_02.Person@27716f4
true

复制代码

 

重写后

复制代码
//person
package com.Demo_02;

import java.util.Objects;

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 + '\'' +
                '}';
    }

    @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;
    }

}
测试 
       Person p1 = new Person( "马尔扎哈",18,"");
        Person p2 = new Person( "莫扎特" , 18,"");

        p1=p2;
        System.out.println(p1);
        System.out.println(p2);


        boolean b = p1.equals(p2);
        System.out.println(b);
结果

Person{name='莫扎特', age=18, sex='男'}
Person{name='莫扎特', age=18, sex='男'}
true

复制代码

 

posted @   漁夫  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示