Object类和Objects类

一.Object类

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用,在对象实例化的时候,最终找的父类就是Object类。

所有对象(包括数组)都实现这个类的方法

根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个,今天我们主要学习其中的2个:

1.public String toString():返回该对象的字符串表示。

2.public boolean equals(String obj):指示其他某个对象是否与此对象“相等”,比较的是对象的地址值,但如果是字符串,比较的是内容。

试着IDEA自动重写一下两个方法,注释解释:

   // 重写Object类的toString方法
   // 打印属性
   @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // 重写equals方法,比较对象的属性
    // 问题:隐含着多态,
    // 即传参的时候自动向上转型为Object obj = person2 = new Person();
    // 弊端:此时无法使用子类特有的内容(属性和方法)
    @Override
    public boolean equals(Object o) {
        // 增加一个判断,传递的参数如果是this本身,直接返回true,提高程序的效率
        if (this == o) return true;
        // 增加一个判断,传递的参数obj如果是null,直接返回false,提高程序的效率
        // getClass() != o.getClass()使用反射技术,判断o是否是Person类型
        // 等效于这一句if(o instanceof Person)
        if (o == null || getClass() != o.getClass()) return false;

        // 解决多态弊端,对象的向下转型
        // 向下转型的时候,增加一个instanceof判断,防止类型转换一次ClassCastException

        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

二.Objects 类

在IDEA自动重写equals代码中,使用到了java.util.Objects类,这是JDK7提供的工具类,它提供了一些方法来操控对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerent(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。

比如:

String s1 = null;
String s2 = "abc";
System.out.println(s1.equals(s2));

报错:

修改后正常运行:

String s1 = null;
String s2 = "abc";
// 如果s1为空,为报空指针异常错误
// null是不能调用方法的,会抛出空指针异常
// Objects类的equals方法:对两个对象进行比较,防止空指针异常
// 源码复制:
// public static boolean equals(Object a, Object b) {
//        return (a == b) || (a != null && a.equals(b));
//    }
boolean b = Objects.equals(s1,s2); // ctrl+点击
System.out.println(b); //比较内容

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值