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异常。