欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > API - Object,包装类,StringBuilder,StringBuffer,StringJoiner

API - Object,包装类,StringBuilder,StringBuffer,StringJoiner

2025/9/16 10:16:10 来源:https://blog.csdn.net/YX54201/article/details/142323366  浏览:    关键词:API - Object,包装类,StringBuilder,StringBuffer,StringJoiner

01 常用API

02 Object类

02_01 常用方法

【1】public String toString()

   ① 功能:以字符串的形式返回对象的地址。

   ② 说明:当我们用sout直接打印对象(会默认调用toString方法),或对象.toString()的返回值时返回的是对象的地址,而我们其实并不希望得到对象的地址而是想到得到对象的内容,这时候我们可以在子类中重写toString方法,返回的结果将是表示对象内容的字符串,此时如果再用sout打印对象,或打印对象.toString()方法的返回值时,根据就近原则调用的将是子类中重写的toString方法。

   ③ 意义:让子类重写,以便返回子类对象的内容。(快捷方式:toS)

【2】public boolean equals()

   ① 功能:比较两个对象的地址是否相等。

   ② 说明:当我们想要比较两个对象是否是同一个对象时并不会调用Object类中的equals方法,而是会使用==直接去比较。

   ③ 意义:所以在开发中Object类的equals方法存在的意义也是供子类重写,从而让Object类的equals方法的功能变为,比较两个对象的内容是否相等。(快捷方式:eq,然后一直回车)

【3】protected Object clone()

   ① 功能:复制一个一模一样的新对象返回。

   ② 关于protected修饰符的说明:它可以在同一个类中/同包下/不同包下的子类中被访问得到。关于在不同包下的子类能访问到指的是,在子类中可以直接访问被protected关键字修饰的成员变量/方法,而对于在子类中new一个继承同一个父类的子类对象,然后通过该子类对象调用父类被protected修饰的方法是不可以的。

   ③ 说明:在Main类的main方法中实例化子类对象A,通过子类对象A是不能直接调用Object类中的clone方法的,因为Object类中的clone方法被protected修饰,要想访问该方法要么在Object类中,要么在Object类同包下的不同类中,要么在不同包下的子类中,而此时Main方法虽然是Object类的子类,但我们实例化出的对象并不是Main类的对象,对于在Main类中new一个继承同一个父类的子类对象,然后通过该子类对象调用父类被protected修饰的方法是不可以的。那我们该如何让对象A调用Object类中的clone方法呢?答:在子类中重写Object类的clone方法(protected Object clone()),由于Main类和子类所在同一个包下,所以我们可以在Main类中通过子类对象A访问到子类中被重写的clone方法的。

   ④ 做法:第一步:给需要clone的对象其对应的类实现Cloneable接口(不是泛型接口),解释:Cloneable接口是一个标记接口,里面没有任何的东西,用于标记某个类是否具有clone的能力。第二步:在该类中重写clone方法(为什么要重写上面已经说过了,因为Object的clone方法被protected修饰,无法访问到)。第三步:在使用clone方法的地方,抛出异常。第四步:在接收clone出来的结果时,由于clone方法的返回值是Object类型的,所以在接收之前需要强转一下。

   ⑤ 深拷贝做法:在浅拷贝基础上,将子类重写的clone方法中进行改造,示例如下图:将浅拷贝的结果强制类型转换后,找到引用类型的成员变量,让引用类型的成员变量调用clone方法,并将clone出来的引用类型的成员变量赋值给浅拷贝出来的对象的相关引用。

02_02 浅拷贝

02_03 深拷贝

03 Objects类

03_01 问题引入

03_02 常用方法

【回答问题】:为什么官方要使用Objects类中的equals方法来比较两个对象的内容是否相等?

                          答:因为假如在将来某个对象为null,那么它直接去调用方法时会出现空指针异常,而使用Objects类中的equals方                                   法它不仅不会抛空指针异常,而且会返回正确的值。

04 包装类

04_01 简单了解

【解释】:

     ① 将基本数据类型的数据转换成对应包装类类型的数据:对应包装类类名.valueOf()

     ② 装箱和①的效果一致,拆箱就是把包装类型的数据转换成基本数据类型的数据。

04_02 常用方法

【1】将基本数据类型的数据转为字符串:基本数据类型的数据 + ""

【2】将包装类型的数据转为字符串:

   ① 包装类名.toString(包装类型数据)  ---》借助的是包装类自己的方法,这个也适用于基本类型

   ② 包装类型数据.toString()               ----》借助的是Object类的toString方法

【3】将字符串类型的数值转为数值本身对应的基本数据类型,例如:包装类名.parseInt(字符串)

【4】将字符串类型的数值转为数值本身对应的包装类类型,包装类名.valueOf(字符串)

【注意】:如果字符串类型的数值是小数,使用parseInt或valueOf是不能转成整型/Integer类型的!!!!

05 StringBuilder类

06 StringBuffer类

07 案例:返回任意整型数组的内容

【提示】:要先判断数组对象不为null 

    public static String getArrayData(int[] array) {// 1. 判断数组对象是否存在if (array == null) {return null;}// 2. 数组对象存在,开始遍历数组进行拼接StringBuilder sb = new StringBuilder("[");for (int i = 0; i < array.length; i++) {if(i < array.length - 1) {sb.append(array[i] + ", ");} else {sb.append(array[i] + "]");}}return sb.toString();}public static void main(String[] args) {int[] array = {12,3,45};System.out.println(getArrayData(array));}

08 StringJoiner类

【解释】:这个的使用例如07的案例,我们在拼接的过程中就可以不用写if语句调整格式了,而是在创建StringJoiner时直接指定元素之间的间隔符和整个拼接结果的开始结束符。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词