常用类-包装类

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装箱与拆箱#
全部评论
今日干货收藏+1
点赞 回复 分享
发布于 2023-02-20 11:30 四川
精品好帖值得细品
点赞 回复 分享
发布于 2023-02-20 11:15 甘肃

相关推荐

程序员花海_:抓紧时间去找实习 项目其实只是玩具项目 脱离业务很远的
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务