Java Object类常用API

J a v a   O b j e c t 类 常 用 A P I \huge{Java\space Object类常用API} Java ObjectAPI

API

首先解释一下什么是 A P I API API
A P I ( A p p l i c a t i o n P r o g r a m m i n g i n t e r f a c e ) API(Application Programming interface) API(ApplicationProgramminginterface):应用程序编程接口。

简单来说就是人家 J a v a Java Java,已经写了很多的库函数啦,你就不用自己写了,到需要用的时候直接调用就可以了。
所以理解 A P I API API直接当作函数看待就可以了。

Object类

什么是 O b j e c t Object Object类?
J a v a Java Java的设定之中 O b j e c t Object Object类是 J a v a Java Java其他所有类的父类或者祖先类。如果一个类定义的时候没有明确指出所继承的父类或者实现的接口类,那么它的父类就是 O b j e c t Object Object类。如果一个类指出了实现的接口或者继承的父类,那么 O b j e c t Object Object类就是它实现接口类的父类或者是它继承父类的父类,也就是说 O b j e c t Object Object类是这个类的祖先类(有点绕,不过理清楚就是当前类在第三层, O b j e c t Object Object类在第一层的关系)

❗❗综上:
J a v a Java Java中的任意类不是默认继承了 O b j e c t Object Object类,就是间接继承了 O b j e c t Object Object

Object类的API

O b j e c t Object Object类作为所有类的父类,肯定有很多的常用的方法来为子类对象进行使用啦!

①. toString()方法

t o S t r i n g ( ) toString() toString()方法的意义就是用字符串来描述指定的信息。
在这里插入图片描述
注意: O b j e c t Object Object类中的最初版本的 t o S t r i n g ( ) toString() toString()方法返回的是当前传入对象的地址信息!
示例:

//这个打印的结果就是直接打印的s这个对象在内存中的地址
Student s = new Student("阿诚", '男', 19);

System.out.println(s);


//下面的打印结果是s中的信息
//因为String类中的toString方法是重写的Object类中的方法
//rs中保存的就是s中的信息的字符串形式
Student s = new Student("阿诚", '男', 19);
String rs = s.toString();
System.out.println(rs);

也可以在打印对象信息的时候直接使用对象,省略 t o S t r i n g ( ) toString() toString()


//这两行代码的作用效果是一模一样的
//因为打印对象的时候Java会自动在后面补充一个toString()
//无论写不写这个toString()都是有的
System.out.println(s.toString());
System.out.println(s);
❗❗❗toString()存在的意义

上面描述也知道了 t o S t r i n g ( ) toString() toString()最初版本就是返回对象的存储地址,但是在实际的情景中,要使用对象的地址的场景真的非常的少,所以最初版本的 t o S t r i n g ( ) toString() toString()方法使用的也非常的少。
可以说 t o S t r i n g ( ) toString() toString()方法的存在基本上就是为了让子类重写,从而根据子类的需求返回子类的信息。

②. equals()方法

e q u a l s ( ) equals() equals()方法的最初版本是比较两个对象的地址是否相同。
在这里插入图片描述
但是有个问题,如果需要比较非基本数据类型的数据的地址是否相同,可以直接使用==进行判断,这时还是使用equals()方法反而有点麻烦,而且在实际开发中更多的是需要判断两个对象的内容是否一致,这样应该如何利用最初版本的equals()方法呢?
先看几个实例。
情况一:

//当前的Student类没有对equals()方法进行重写
//所以调用的时候就是默认的Objet类的equals()方法
Student s1 = new Student("周雄", '男', 19);
Student s2 = new Student("周雄", '男', 19);
        // equals默认是比较2个对象的地址是否相同,子类重写后会调用子类重写的来比较内容是否相同。
//容易知道,下面两种情况比较都是两对象地址是否相同
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);

运行结果:
在这里插入图片描述
情况二:
Student类中对最初版本的equals()方法进行重写。

	
	//Student类的成员变量
    private String name;
    private char sex;
    private int age;


/**
       自己重写equals,自己定制相等规则。
        两个对象的内容一样就认为是相等的
     s1.equals(s2)
     比较者:s1 == this
     被比较者: s2 ==> o
     */
    @Override
    public boolean equals(Object o){
        // 1、首先判断o是不是学生类型
        if(o instanceof Student){
            Student s2 = (Student) o;
            // 2、判断2个对象的内容是否一样。
            if(this.name.equals(s2.name) &&
                 this.age == s2.age && this.sex == s2.sex){
                return true;
            }else {
                return false;
            }
            //❗这里这个equals()方法调用的是String类中的equals()方法
            //比较的是两个字符串的内容是否相同
            //与当前重写的函数虽然名字相同但是实际上不是一个函数
            return this.name.equals(s2.name) && this.age == s2.age
                    && this.sex == s2.sex ;

        }else {
            // 学生只能和学生比较,否则结果一定是false
            return false;
        }
    }



/**
     定制相等规则。
     这个重写的equals()方法在IDEA中可以自动生成
     生成步骤:右键 -> generate -> equals() and hashCode()
     
     两个对象的内容一样就认为是相等的
     s1.equals(s2)
     比较者:s1 == this
     被比较者: s2 ==> o
     */
    @Override
    public boolean equals(Object o) {
        // 1、判断是否是同一个对象比较,如果是返回true。
        if (this == o) return true;
        // 2、如果o是null返回false  如果o不是学生类型返回false  ...Student !=  ..Pig
        if (o == null || this.getClass() != o.getClass()) return false;
        // 3、说明o一定是学生类型而且不为null
        Student student = (Student) o;
        return sex == student.sex && age == student.age && Objects.equals(name, student.name);
    }

重写了 e q u a l s ( ) equals() equals()方法再次运行之前的代码:

Student s1 = new Student("周雄", '男', 19);
Student s2 = new Student("周雄", '男', 19);
        
System.out.println(s1.equals(s2));
System.out.println(s1 == s2);

运行结果:
在这里插入图片描述
这次Student类中的 e q u a l s ( ) equals() equals()方法就是用于判断两个学生对象的内容是否相同了。

❗❗❗equals()方法存在的意义

t o S t r i n g ( ) toString() toString()方法一样, e q u a l s ( ) equals() equals()方法存在的意义也就是让子类重写来满足子类的特殊要求的,因为最初版本的 e q u a l s ( ) equals() equals()方法的使用场景实在是太少了。

Objects类

O b j e c t s Objects Objects类就是一个工具类,里面存放了很多的功能用于让别人进行调用。
回顾一下调用重写 e q u a l s ( ) equals() equals()方法的格式:

a1.equals(a2)

调用的格式写诗是这么写没错,但是有一个隐含的问题,如果a1这个对象本身就是null怎么办?肯定不能调用null e q u a l s ( ) equals() equals()方法,一定报错!

O b j e c t s Objects Objects中也有 e q u a l s ( ) equals() equals()方法,而且这方法是重写过可以判断对象内容的,下面这样调用:

Objects.equals(a1,a2)

这样调用的话,无论是a1还是a2谁是null都无所谓都可以进行判断。这种写法更加安全❗

O b j e c t s Objects Objects类的常见方法如下:

1. euqals()方法

在这里插入图片描述

System.out.println(s1.equals(s2));  
 // 留下了隐患,可能出现空指针异常。

System.out.println(Objects.equals(s1, s2)); 
// 更安全,结果也是对的!

J a v a Java Java O b j e c t s Objects Objects类的中的 e q u a l s ( ) equals() equals()方法源码:

Objectspublic static boolean equals(Object a, Object b) {
                  return (a == b) || (a != null && a.equals(b));
}

就是先判断地址是不是相等,然后在进行 e q u a l s ( ) equals() equals()方法比较
❗❗源码中可以知道后面调用了传入类型对应的 e q u a l s ( ) equals() equals()方法,所以传入的类型本身必须已经重写过 e q u a l s ( ) equals() equals()方法了!

2. isNULL()方法

判断一个对象是否是null,如果是返回true,否则返回false
在这里插入图片描述
示例:

String s1 = null;
String s2 = new String("应长天");

System.out.println(Objects.isNull(s1)); // true
System.out.println(s1 == null); // true

System.out.println(Objects.isNull(s2)); // false
System.out.println(s2 == null); // false
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值