【Java】常用API——Object、StringBuilder、包装类
🔎这里是【Java】,关注我学习Java不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️
👀专栏介绍
【Java】 目前主要更新Java,一起学习一起进步。
👀本期介绍
本期主要介绍常用API——Object、StringBuilder、包装类
文章目录
1. Object类
1.1 概述
java.lang.Object
类是
Java
语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使
用。在对象实例
化的时候,最终找的父类就是
Object
。
如果一个类没有特别指定父类,
那么默认则继承自
Object
类。例如
根据
JDK
源代码及
Object
类的
API
文档,
Object
类当中包含的方法有
11
个。今天我们主要学习其中
的
2
个:
public String toString()
:返回该对象的字符串表示。
public boolean equals(Object obj)
:指示其他某个对象是否与此对象
“
相等
”
。
1.2 toString方法
方法摘要
public String toString()
:返回该对象的字符串表示。
toString
方法返回该对象的字符串表示,其实该字符串内容就是对象的类型
+@+
内存地址值。
由于
toString
方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符
串表现形式,因
此也需要重写它。
覆盖重写
如果不希望使用
toString
方法的默认行为,则可以对它进行覆盖重写。例如自定义的
Person
类:
在
IntelliJ IDEA
中,可以点击
Code
菜单中的
Generate...
,也可以使用快捷键
alt+insert
,点击
toString()
选
项。选择需要包含的成员变量并确定。如下图所示:
小贴士:
在我们直接使用输出语句输出对象名的时候
,
其实通过该对象调用了其
toString()
方法。
1.3 equals方法
方法摘要
public boolean equals(Object obj)
:指示其他某个对象是否与此对象
“
相等
”
。
调用成员方法
equals
并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的
“
相
同
”
有默认和自定
义两种方式。
默认地址比较
如果没有覆盖重写
equals
方法,那么
Object
类中默认进行
==
运算符的对象地址比较,只要不是同
一个对象,结果
必然为
false
。
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆
盖重写
equals
方
法。例如:
这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数
IDE
都可以自动生
成
equals
方法的
代码内容。在
IntelliJ IDEA
中,可以使用
Code
菜单中的
Generate…
选项,也可以使用快捷键
alt+insert
,并选
择
equals() and hashCode()
进行自动代码生成。如下图所示:
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)
:
判断两个对象是否相等。
我们可以查看一下源码,学习一下:
2. StringBuilder类
2.1 字符串拼接问题
由于
String
类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对
象。例如:
在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。
根据这句话分析我们的代码,其实总共产生了三个字符串,即
"Hello"
、
"World"
和
"HelloWorld"
。引用变量
s
首先指向
Hello
对象,最终指向拼接出来的新字符串对象,即
HelloWord
。
由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的
String
对象,既耗时,又浪
费空间。为了解
决这一问题,可以使用
java.lang.StringBuilder
类。
2.2 StringBuilder概述
查阅
java.lang.StringBuilder
的
API
,
StringBuilder
又称为可变字符序列,它是一个类似于
String
的
字符串缓冲
区,通过某些方法调用可以改变该序列的长度和内容。
原来
StringBuilder
是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对
其中的字符串进
行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。
StringBuilder
会自动
维护数组的扩容。原理如下图所示:
(
默认
16
字符空间,超过自动扩充
)
2.3 构造方法
根据
StringBuilder
的
API
文档,常用构造方法有
2
个:
public StringBuilder()
:构造一个空的
StringBuilder
容器。
public StringBuilder(String str)
:构造一个
StringBuilder
容器,并将字符串添加进去。
2.4 常用方法
StringBuilder
常用的方法有
2
个:
public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身。
public String toString()
:将当前
StringBuilder
对象转换为
String
对象。
append
方法
append
方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符
串内容添加到
StringBuilder
中。例如:
备注:
StringBuilder
已经覆盖重写了
Object
当中的
toString
方法。
toString
方法
通过
toString
方法,
StringBuilder
对象将会转换为不可变的
String
对象。如:
3. 包装类
3.1 概述
Java
提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建
对象使用,因为
对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包
装类,如下:
3.2 装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为
”
装箱
“
与
”
拆箱
“
:
装箱
:从基本类型转换为对应的包装类对象。
拆箱
:从包装类对象转换为对应的基本类型。
用
Integer
与
int
为例:(看懂代码即可)
基本数值
---->
包装对象
包装对象---->基本数值
3.3自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从
Java 5
(
JDK 1.5
)开始,基本类型与包装类的装箱、拆箱动作
可以自动完成。例如:
3.3 基本类型与字符串之间的转换
基本类型转换为
String
基本类型转换
String
总共有三种方式,查看课后资料可以得知,这里只讲最简单的一种方式:
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.lang.NumberFormatException
异常。