常用类-包装类
1 基本介绍
包装类就是8种基本数据类型对应的引用类型,基本数据类型与对应的包装类可以相互转换。对应关系如表1-1所示。
基本数据类型 | 包装类 |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
表1-1 基本数据类型与包装类的对应关系
八种包装类都实现了接口Serializable和接口Comparable,其中Boolean类和Character类的直接父类是Object,其它6种包装类的直接父类为Number。其继承结构如图1.1所示。
图1.1 包装类继承结构
2 装箱与拆箱
/** * @author 赵帅博 * @version 1.0 */ // JDK5以前使用的是手动装箱与手动拆箱,从JDK5开始引入了自动装箱与自动拆箱。 // 装箱:将基本数据类型转换为包装类(引用类型)。如:int -> Integer // 拆箱:将包装类转换为基本数据类型。如:Integer -> int // 1.手动装箱-2种方式 int num = 100 // 定义一个int类型的变量 // 方式1:创建一个Integer对象,将int类型的变量作为参数传入构造器。 Integer integer = new Integer(num); // 方式2:调用Integer类的valueOf()方法 Integer valueOfInt = Integer.valueOf(num); // 2.手动拆箱 Integer -> int int i = integer.intValue(); //调用Integer对象的intValue()方法 // 3.自动装箱 Integer integer2 = num; //直接将int变量赋值给Integer对象即可 // 4.自动拆箱 int intNum = integer2; //直接将Integer类的对象赋值给int变量
3 valueOf()和intValue()源码
/** valueOf()方法源码
* public static Integer valueOf(int i) {
* if (i >= IntegerCache.low && i <= IntegerCache.high)
* return IntegerCache.cache[i + (-IntegerCache.low)];
* return new Integer(i);
* }
* 1.如果传进来的int变量的值 在范围 -128~127之间 ,就直接返回该值(引用类型的地址没有发生变化)
* 2.如果超出范围就直接new一个新的Integer类对象,并返回这个新对象()
*/
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false 这里i和j都是new的新对象,所以地址不同相同
Integer m = 12;
Integer n = 12;
System.out.println(m == n); //ture
Integer x = 128;
Integer y = 128;
System.out.println(x == y);// false
// 上面两个为什么返回不同的值?
// 实际上自动装箱底层使用的还是valueOf()方法
// m和n的值都在范围内,可以认为返回的是同一个对象(hashCode值相同)
// x和y的值不在范围内,底层都是new了一个新对象返回,所以地址不同
/** intValue()源码
* 直接将存放数值的private final int value;返回
* public int intValue() {
* return value;
* }
*/
4 包装类与String转换
// 1.包装类 -> String类-3种方式。如Integer -> String // 方式1:使用Integer类的toString()方法 Integer i = 10; String s1 = i.toString(); // 方式2:使用String类的valueOf()方法,将Integer对象作为参数传入 String s2 = String.valueOf(i); // 方式3:直接使用字符串拼接 String s3 = i + ""; // 2.String类 -> 包装类-2种方式 // 方式1:new一个Integer对象,将String作为对象传入构造器 String str = "123"; // 注意:String对象的内容必须是可以转换为Integer的值 Integer integer = new Integer(str); // 方式2:使用Integer类的parseInt()方法 Integer integer1 = Integer.parseInt(str);
5 包装类的常用方法
Integer.MIN_VALUE // 返回最小值
Integer.MAX_VALUE // 返回最大值
Character.isDigit("a") //判断是否为数字
Character.isLetter("a") //判断是否为字母
Character.isUpperCase("a") //判断是否为大写
Character.isLowerCase("a") //判断是否为小写
Character.isWhitespace("a") //判断是否为空格
Character.toUpperCase("a") //转为大写
Character.toLowerCase("a") //转为小写
#包装类##Java包装类##Java装箱与拆箱#