Java_Object类_11

Object类

  1. 引入
    1. 包:java.lang.Object
    2. Object类是Java中的祖宗类。
    3. 一个类要么默认继承了Object类,要么间接继承了Object类。
    4. Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。

  2. Object类的常用方法:

    1. public String toString():
      默认是返回当前对象在堆内存中的地址信息
      com.itheima._12Object类的详细使用.Student@735b478
      – 默认的地址信息格式:类的全限名@内存地址
      – 直接输出对象名称,默认会自动调用toString()方法,所以输出对象toString()调用可以省略不写
      – 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
      开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息!
      所以父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息输出!!
      小结:
      toString()默认是返回当前对象在堆内存中的地址信息:
      开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息!
      所以父类toString()方法存在的意义就是为了被子类重写,重写toString可以看到对象的内容信息。

    2. public boolean equals(Object o):

toString

默认返回地址信息,代码如下

public class ObjectToStringDemo01 {
    public static void main(String[] args) {
        Student zs = new Student("张森",21 , '男');
        // 直接调用toString方法返回的是对象在内存重点的地址
        // System.out.println(zs.toString());
        // 直接输出对象名称,默认会自动调用toString()方法,所以输出对象toString()调用可以省略不写
        System.out.println(zs);
    }
}

打印结果:
在这里插入图片描述
而这样是毫无意义的,存在的价值就是重写后然后返回对象内容信息

    public String toString() {
        return "_object01{name = " + name + ", age = " + age + ", sex = " + sex + "}";
    }

结果:
在这里插入图片描述

equals

(2)public boolean equals(Object o):
– 默认是比较两个对象的地址是否相同。相同返回true,反之。
– 直接比较两个对象的地址是否相同完全可以用“==”替代equals。
所以equals存在的意义是为了被子类重写,以便程序员可以
自己来定制比较规则。

– 需求:只要两个对象的内容一样,我们就认为他们是相等的。
小结:
equals存在的意义是为了被子类重写,以便程序员可以
自己来定制比较规则。

重写equals,定义比较内容!!!!

public class _equals01 {
    public static void main(String[] args){
        students st1 = students.createst();
        students st2 = students.createst();

        System.out.println(st1.equals(st2));
    }
    public static class students{
        private String name;
        private int age;
        private char sex;
        public students(String name,int age,char sex){
            this.age = age;
            this.sex = sex;
            this.name = name;
        }
        @Override
        public boolean equals(Object obj){
            if(obj instanceof students){
                //如果是学生类型 强转成学生对象
                students st2 = (students) obj;
                return this.name.equals(st2.name) && this.age == st2.age
                    && this.sex == st2.sex;
            }else return false;
        }
        public static students createst(){
            return new students("沐鑫",22,'男');
        }
    }
}

官方提供的重写方法!!更高效,更周到,更安全!!

  @Override
    public boolean equals(Object o) {
        // 1.判断是否自己和自己比较,如果是同一个对象比较直接返回true
        if (this == o) return true;
        // 2.判断被比较者是否为null ,以及是否是学生类型。
        if (o == null || this.getClass() != o.getClass()) return false;
        // 3.o一定是学生类型,强制转换成学生,开始比较内容!
        Student student = (Student) o;
        return age == student.age &&
                sex == student.sex &&
                Objects.equals(name, student.name);
    }

Objects

  1. Objects类与Object还是继承关系。
    Objects类是从JDK 1.7开始之后才有的。

  2. Objects的方法:

    1. public static boolean equals(Object a, Object b)
      – 比较两个对象的。
      – 底层进行非空判断,从而可以避免空指针异常。更安全!!推荐使用!!
      public static boolean equals(Object a, Object b) {
      return a == b || a != null && a.equals(b);
      }
    2. public static boolean isNull(Object obj)
      – 判断变量是否为null ,为null返回true ,反之!
public class _Objects01 {
    public static void main(String[] args){
        _student st1 = null;
        _student st2 = new _student();

        System.out.println(Objects.equals(st1,st2));
        System.out.println(st1.equals(st2)); 
    }
}

运行结果:显然Objects类引用的报了空值异常的错误!!!更安全!!!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐鑫本鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值