类的关系图:
包装类
一、分类
基本数据类型 — 包装类
byte — Byte
boolean — Boolean
short — Short
char — Character
int — Integer
long — Long
float — Float
double — Double
除了Integer 和Character 外,其它六个类类名和基本数据类型一致,只需将第一个字母大写 即可
二、作用
有时方法需传递一个Object类变量时,传递int类型编译不通过,这时需为包装类
例:
public void test(Object o){
}
需传递数值9时为:
test(new Integer(6));
- 可以通过包装类的构造函数基本数据类型转换为包装对象「装箱」
Boolean(boolean value)
Character(char value)
Integer(int value)
Long(long value)
Float(float value)
Double(double value) - 可以通过××Value()方法将将包装类对象转换为基本数据类型「拆箱」
intValue()
longValue()
floatValue()
… - 除Character之外,包装类都存在valueOf()方法:用于将字符串转成相应的包装类
- 包装类都存在toString()方法:将包装类转换成对应的字符串
举例代码:
public class Test {
public static void main(String[] args) {
//基本数据类型转换成包装类对象
//「装箱」
Integer a1 = new Integer(2);//方式一
Integer a2 = Integer.valueOf(3); //方式二:推荐
System.out.println("a1-->" + a1);
System.out.println("a2-->" + a2);
//把包装类对象转成基本数据类型
//「拆箱」
int b1 = a1.intValue();
double b2 = a1.doubleValue();
System.out.println("b1-->" + b1);
System.out.println("b2-->" + b2);
//把字符串转成包装类对象
Integer c1 = new Integer("12");
Integer c2 = Integer.valueOf("1256");
System.out.println("c1-->" + c1);
System.out.println("c2-->" + c2);
//包装类转成字符串
String d1 = c1.toString();
System.out.println("d1-->" + d1);
//包装类里定义的常用属性常量
System.out.println("最大的int:"+ Integer.MAX_VALUE);
System.out.println("最小的int:"+ Integer.MIN_VALUE);
}
}
🔥Character包装类的常用方法
●Character.isLetter('a')
; //判断这个字符是否为英文字母
●Character.isDigit('1')
; //判断这个字符是否为数字
●Character.isUpperCase('A')
; //判断这个字符是否为大写
●Character.isLowerCase('a')
; //判断这个字符是否为小写
●Character.isWhitespace(' ')
; //判断这个字符是否为空格或回车
三、自动装箱与自动拆箱
autoboxing 与 unboxing
在JDK1.5之前,Integer i = 5是错误的
- 自动装箱:
在JDK1.5之后,Integer i = 5可以实现基本数据转换成包装类,是因为JVM执行了Integer i = Integer.valueOf(5)的操作 - 自动拆箱:
类似地,JVM也可以将一个对象拆箱转换为基本数据类型,不用再显式调用intValue()等方法
代码如下:
public class Demo02 {
public static void main(String[] args) {
//自动装箱
Integer i = 7; //Integer i = Integer.valurOf(7);
System.out.println(i); //7
//自动拆箱
i = i + 9; //int i = i.intvalue();
System.out.println(i); //16
}
}
四、缓存区
提高效率
以Integer为例,在自动装箱时,,在类加载时已经为在-128~127区间内的每个数值创建了对象,并将这256个对象存放在cache[]数组中。当自动装箱过程发生时或手动调用valueOf()时,首先会先判断是否在该区间,如果在,就直接获取数组中对应的包装类对象引用;如果不在,则通过new调用包装类的构造方法来创建对象
- Integer、Byte、Short、Long、Character都有缓存区
- Double、Float没有缓存区
- Boolean也有缓存区,缓存在了两个静态常量(TRUE/FALSE)中;