【Java】常用API——Object、StringBuilder、包装类_API


👀专栏介绍

【Java】 目前主要更新Java,一起学习一起进步。

👀本期介绍

本期主要介绍常用API——Object、StringBuilder、包装类

文章目录

​1. Object类​

​1.1 概述​

​1.2 toString方法​

​1.3 equals方法​

​1.4 Objects类​

​2. StringBuilder类​

​2.1 字符串拼接问题​

​2.2 StringBuilder概述​

​2.3 构造方法​

​2.4 常用方法​

​3. 包装类​

​3.1 概述​

​3.2 装箱与拆箱​

​3.3自动装箱与自动拆箱​

​3.3 基本类型与字符串之间的转换​

1. Object类

1.1 概述


java.lang.Object 类是 Java 语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使



用。在对象实例



化的时候,最终找的父类就是 Object 。



如果一个类没有特别指定父类,



那么默认则继承自 Object 类。例如



【Java】常用API——Object、StringBuilder、包装类_基本类型_02


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



的 2 个:



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



public boolean equals(Object obj) :指示其他某个对象是否与此对象 “ 相等 ” 。


1.2 toString方法


方法摘要



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



toString 方法返回该对象的字符串表示,其实该字符串内容就是对象的类型 +@+ 内存地址值。



由于 toString 方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符



串表现形式,因



此也需要重写它。



覆盖重写



如果不希望使用 toString 方法的默认行为,则可以对它进行覆盖重写。例如自定义的 Person 类:



【Java】常用API——Object、StringBuilder、包装类_API_03


在 IntelliJ IDEA 中,可以点击 Code 菜单中的 Generate... ,也可以使用快捷键 alt+insert ,点击



toString() 选



项。选择需要包含的成员变量并确定。如下图所示:


 

【Java】常用API——Object、StringBuilder、包装类_字符串_04


小贴士:



在我们直接使用输出语句输出对象名的时候 , 其实通过该对象调用了其 toString() 方法。


1.3 equals方法


方法摘要



public boolean equals(Object obj) :指示其他某个对象是否与此对象 “ 相等 ” 。



调用成员方法 equals 并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的 “ 相



同 ” 有默认和自定



义两种方式。



默认地址比较



如果没有覆盖重写 equals 方法,那么 Object 类中默认进行 == 运算符的对象地址比较,只要不是同



一个对象,结果



必然为 false 。



对象内容比较



如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆
 


盖重写 equals 方



法。例如:



【Java】常用API——Object、StringBuilder、包装类_字符串_05


【Java】常用API——Object、StringBuilder、包装类_字符串_06


这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数 IDE 都可以自动生



成 equals 方法的



代码内容。在 IntelliJ IDEA 中,可以使用 Code 菜单中的 Generate… 选项,也可以使用快捷键



alt+insert ,并选



择 equals() and hashCode() 进行自动代码生成。如下图所示:


 

【Java】常用API——Object、StringBuilder、包装类_原力计划_07

【Java】常用API——Object、StringBuilder、包装类_原力计划_08

 

【Java】常用API——Object、StringBuilder、包装类_java_09

tips:Object类当中的hashCode等其他方法,今后学习。

1.4 Objects类


在刚才 IDEA 自动重写 equals 代码中,使用到了 java.util.Objects 类,那么这个类是什么呢?



JDK7 添加了一个 Objects 工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组


成,这些方法是


null-save (空指针安全的)或 null-tolerant (容忍空指针的),用于计算对象的 hashcode 、返回对


象的字符串表


示形式、比较两个对象。


在比较两个对象的时候, Object 的 equals 方法容易抛出空指针异常,而 Objects 类中的 equals 方法


就优化了这个问


题。方法如下:


public static boolean equals(Object a, Object b) : 判断两个对象是否相等。


我们可以查看一下源码,学习一下:



【Java】常用API——Object、StringBuilder、包装类_java_10


2. StringBuilder类

2.1 字符串拼接问题


由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对


象。例如:



【Java】常用API——Object、StringBuilder、包装类_基本类型_11


在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。


根据这句话分析我们的代码,其实总共产生了三个字符串,即 "Hello" 、 "World" 和 "HelloWorld"


。引用变量 s


首先指向 Hello 对象,最终指向拼接出来的新字符串对象,即 HelloWord 。



【Java】常用API——Object、StringBuilder、包装类_原力计划_12


由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的 String 对象,既耗时,又浪



费空间。为了解


决这一问题,可以使用 java.lang.StringBuilder 类。


2.2 StringBuilder概述


查阅 java.lang.StringBuilder 的 API , StringBuilder 又称为可变字符序列,它是一个类似于 String 的


字符串缓冲


区,通过某些方法调用可以改变该序列的长度和内容。


原来 StringBuilder 是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对


其中的字符串进


行各种操作。


它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。


StringBuilder 会自动


维护数组的扩容。原理如下图所示:


( 默认 16 字符空间,超过自动扩充 )



【Java】常用API——Object、StringBuilder、包装类_字符串_13


2.3 构造方法


根据 StringBuilder 的 API 文档,常用构造方法有 2 个:


public StringBuilder() :构造一个空的 StringBuilder 容器。


public StringBuilder(String str) :构造一个 StringBuilder 容器,并将字符串添加进去。



【Java】常用API——Object、StringBuilder、包装类_基本类型_14


2.4 常用方法


StringBuilder 常用的方法有 2 个:


public StringBuilder append(...) :添加任意类型数据的字符串形式,并返回当前对象自身。


public String toString() :将当前 StringBuilder 对象转换为 String 对象。


append 方法


append 方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符


串内容添加到


StringBuilder 中。例如:



【Java】常用API——Object、StringBuilder、包装类_java_15


备注: StringBuilder 已经覆盖重写了 Object 当中的 toString 方法。


toString 方法


通过 toString 方法, StringBuilder 对象将会转换为不可变的 String 对象。如:

 

【Java】常用API——Object、StringBuilder、包装类_API_16


3. 包装类

3.1 概述


Java 提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建


对象使用,因为


对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包


装类,如下:


【Java】常用API——Object、StringBuilder、包装类_原力计划_17

3.2 装箱与拆箱


基本类型与对应的包装类对象之间,来回转换的过程称为 ” 装箱 “ 与 ” 拆箱 “ :


装箱 :从基本类型转换为对应的包装类对象。


拆箱 :从包装类对象转换为对应的基本类型。


用 Integer 与 int 为例:(看懂代码即可)


基本数值 ----> 包装对象



【Java】常用API——Object、StringBuilder、包装类_字符串_18


包装对象---->基本数值

【Java】常用API——Object、StringBuilder、包装类_API_19

3.3自动装箱与自动拆箱


由于我们经常要做基本类型与包装类之间的转换,从 Java 5 (


JDK 1.5 )开始,基本类型与包装类的装箱、拆箱动作


可以自动完成。例如:



【Java】常用API——Object、StringBuilder、包装类_java_20


3.3 基本类型与字符串之间的转换


基本类型转换为 String



基本类型转换 String 总共有三种方式,查看课后资料可以得知,这里只讲最简单的一种方式:


 

【Java】常用API——Object、StringBuilder、包装类_字符串_21


String 转换成对应的基本类型



除了 Character 类之外,其他所有包装类都具有 parseXxx 静态方法可以将字符串参数转换为对应的



基本类型:



public static byte parseByte(String s) :将字符串参数转换为对应的 byte 基本类型。



public static short parseShort(String s) :将字符串参数转换为对应的 short 基本类型。



public static int parseInt(String s) :将字符串参数转换为对应的 int 基本类型。



public static long parseLong(String s) :将字符串参数转换为对应的 long 基本类型。



public static float parseFloat(String s) :将字符串参数转换为对应的 flfloat 基本类型。



public static double parseDouble(String s) :将字符串参数转换为对应的 double 基本类型。



public static boolean parseBoolean(String s) :将字符串参数转换为对应的 boolean 基本类型。



代码使用(仅以 Integer 类的静态方法 parseXxx 为例)如:


【Java】常用API——Object、StringBuilder、包装类_字符串_22


注意 : 如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出



java.lang.NumberFormatException



异常。