Java基础丨包装类

前言

我们知道 Java 是面向对象的编程语言,在 Java 的设计中提倡一种思想,即一切皆对象。从数据类型的划分中,我们知道 Java 中的数据类型分为基本数据类型引用数据类型。对于简单的运算,可以直接使用基本数据类型;对于需要对象化交互的场景(例如,将基本数据类型存入集合中),就需要将基本数据类型封装成 Java 对象,但是基本数据类型怎么能够称为对象呢?
于是 Java 为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes)。

包装类可以分为 3 类:Character、Number、Boolean,包装类的架构图如下所示:
包装类

基本数据类型与包装类

下表列出了基本数据类型对应的包装类。这些包装类都位于 java.lang 包下,因此使用包装类时,我们不需要手动引入。

序号基本数据类型对应的包装类
1byteByte
2shortShort
3intInteger
4longLong
5charCharacter
6floatFloat
7doubleDouble
8booleanBoolean

除了 Integer 和 Character 定义的名称与基本数据类型定义的名称相差较大外,其它的 6 种类型的名称都是其基本数据类型的首字母的大写。

包装类常用方法

Number 类是所有数值类型包装类的父类,这里以其中一个子类 Integer 类为例,介绍其构造方法、常用方法以及常量。

Integer 类

构造方法

Integer 类提供两个构造方法:

  1. Integer(int value):以 int 型变量作为参数创建 Integer 对象;
  2. Integer(String s):以 String 型变量作为参数创建 Integer 对象。

但是,官方文档中显示这两个构造方法都有 @Deprecated 注解了,它们从 JDK9 就开始过时了,被废弃使用。

Deprecated.
It is rarely appropriate to use this constructor. The static factory valueOf(int) is generally a better choice, as it is likely to yield significantly better space and time performance.

官方推荐使用 Integer num1 = Integer.valueOf(int); 这种构造方法,因为它会有更好的空间和时间性能。

Deprecated.
It is rarely appropriate to use this constructor. Use parseInt(String) to convert a string to a int primitive, or use valueOf(String) to convert a string to an Integer object.

官方推荐使用 Integer num2 = Integer.parseInt(String) 或者 Integer num3 = Integer.valueOf(String); 把 String 型变量创建 Integer 对象。

// 'new Integer()' 已经过时了,使用 valueOf(int)
Integer num1 = Integer.valueOf(999);
// 使用 parseInt(String)
Integer num2 = Integer.parseInt("100");
// 或者使用 valueOf(String)
Integer num3 = Integer.valueOf("666");

常用方法

  • byte byteValue():以 byte 类型返回该 Integer 的值;
  • short shortValue():以 short 类型返回此 Integer 对象;
  • int intValue():以 int 类型返回此 Integer 对象;
  • long longValue():以 long 类型返回此 Integer 对象;
  • float floatValue():以 float 类型返回此 Integer 对象;
  • double doubleValue():以 double 类型返回此 Integer 对象;
  • int compareTo(Integer anotherInteger):在数值上比较两个 Integer 对象。如果这两个值相等,则返回 0;如果调用对象的数值小于 anotherInteger 的数值,则返回负值;如果调用对象的数值大于 anotherInteger 的数值,则返回正值;
  • boolean equals(Object obj):比较此对象与指定对象是否相等;
  • String toString():返回一个表示该 Integer 值的 String 对象;
  • static Integer valueOf(String s):返回保存指定的 String 值的 Integer 对象;
  • static int parseInt​(String s):返回字符串参数 s 解析的等价 int 整数值;
  • static String toBinaryString​(int i):返回整数参数 i 的二进制字符串表示形式;
  • static String toOctalString​(int i):返回整数参数 i 的八进制字符串表示形式;
  • static String toHexString​(int i):返回整数参数 i 的十六进制字符串表示形式。

内置常量

  1. BYTES:用于以2的补码二进制形式表示 int 值的字节数。
  2. MAX_VALUE:int 累型可取的最大值,231-1。
  3. MIN_VALUE:int 累型可取的最小值,-231
  4. SIZE:表示以二进制补码形式表示 int 值的位数。
  5. TYPE:表示 Class 实例的基本类型。
int bytes = Integer.BYTES;
int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;
int size = Integer.SIZE;
Class<Integer> type = Integer.TYPE;
        
System.out.println("int 类型的二进制字节数:" + bytes);
System.out.println("int 类型可取的最大值:" + maxValue);
System.out.println("int 类型可取的最小值:" + minValue);
System.out.println("int 类型的二进制位数:" + size);
System.out.println("int 类型的 Class实例:" + type);

Character 类

构造方法

自从 JDK9 开始,Character​(char value)也废弃了,官方推荐使用 Character c = Character.valueOf(char) 代替。

常用方法

  • char charValue():返回此 Character 对象的值;
  • int compareTo(Character anotherCharacter):返回此 Character 对象的值,根据数字比较两个 Character 对象,若这两个对象相等则返回 0 ;
  • boolean equals(Object obj):将调用该方法的对象与指定的对象相比较;
  • static char toUpperCase​(char ch):将字符参数转换为大写;
  • static char toLowerCase​(char ch):将字符参数转换为小写;
  • String toString():返回一个表示指定 char 值的 String 对象;
  • static boolean isLetter​(char ch):判断指定字符是否为字母,如果字符为字母,则返回 true;否则返回 false;
  • static boolean isDigit​(char ch):判断指定字符是否为数字,如果字符为数字,则返回 true;否则返回 false;
  • static boolean isLetterOrDigit​(char ch):判断指定字符是否为一个字母或数字,如果字符是字母或数字,则返回 true,否则为 false。
  • static boolean isUpperCase(char ch):判断指定字符是否是大写字符;
  • static boolean isLowerCase(char ch):判断指定字符是否是小写字符。

Boolean 类

构造方法

自从 JDK9 开始,官方文档推荐使用 Boolean bool = Boolean.valueOf(boolean); 代替 Boolean​(boolean value),使用 Boolean bool = Boolean.parseBoolean(String); 或者 Boolean bool = Boolean.valueOf(String); 代替 Boolean​(String s)

常用方法

  • boolean booleanValue():将 Boolean 对象的值以对应的 boolean 值返回;
  • boolean equals(Object obj):判断调用该方法的对象与 obj 是否相等,当且仅当参数不是 null,而且与调用该方法的对象一样都表示同一个 boolean 值的 Boolean 对象时, 才返回 true;
  • static boolean parseBoolean​(String s):将字符串参数解析为 boolean 值;
  • String toString():返回表示该 boolean 值的 String 对象;
  • static boolean valueOf(String s):返回一个用指定的字符串表示值的 boolean 值。

内置常量

  1. FALSE:对应基值 false 的 Boolean 对象;
  2. TRUE:对应基值 true 的 Boolean 对象;
  3. TYPE:表示基本类型 Class 实例。

装箱和拆箱

基本数据类型转换为包装类的过程称为装箱,例如把 int 包装成 Integer 类的对象;包装类变为基本数据类型的过程称为拆箱,例如把 Integer 类的对象重新简化为 int。

装箱和拆箱又有自动和手动之分,手动实例化一个包装类称为手动拆箱装箱。
Java1.5 版本之前必须手动拆箱装箱,之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行装箱及拆箱操作,不用在进行手工操作,为开发者提供了更多的方便。例如:

int i = 500;
// 自动装箱
Integer obj1 = i;
// 自动拆箱
int j = obj1;
System.out.println("j = " + j);
// 手动拆箱
int k = obj1.intValue();
System.out.println("k = " + k);

Integer obj2 = 500;
System.out.println("obj1 是否等价于 obj2:" + obj2.equals(obj1));

自动拆箱就是直接将一个包装类型的变量,赋值给对应的基本数据类型变量;手动拆箱通过调用对应包装类下的 xxxValue() 方法来实现。

注意点

  • 在使用集合时,要使用包装类而不是基本数据类型;
  • 包装类的默认值都是 null,基本数据类型中数值型的默认值是 0;
  • String str = nullString s = "" 不一样,前者表示生成一个 String 类型的引用,但不分配内存空间;而后者会分配内存空间来存放空字符串""。

参考

易百教程
JAVAschool
官方API文档
打赏
评论区
头像
文章目录