包装类
4.1介绍
将基本数据类型, 包装成类 (变成引用数据类型)
作用:变成类, 就可以创建对象了,对象就可以调用方法方便的解决问题了
4.2基础类型对应的包装类
4.2.1分类
基本数据类型 | 引用数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
4.2.2如何进行包装(用Integer举例)
public Integer(int value) |
---|
public static Integer valueOf(int i) |
4.2.2.1手动装箱
在 jdk5 以前,将基本数据类型转换为包装类需要我们手动。这里以基本数据类型 int 转换包装类 Integer 为例。
int n1 = 100;
//手动装箱 int -> Integer
Integer integer = new Integer(n1);
//或者 Integer integer = Integer.valueOf(n1);
4.2.2.2自动装箱(JDK5)
在 jdk5 及以后,实现了自动装箱工作。
int n2 = 200;
//自动装箱
Integer integer2 = n2;//底层使用的是 Integer.valueOf(n2)
原理:在将一个基本数据类型的值赋给其对应的包装类对象时,java会自动调用其中的valueof方法,该方法接收这个基本数据类型的值,然后创建一个该包装类的对象并将这个值存进去,然后返回该对象
4.2.2.3手动拆箱
在 jdk5 以前,将包装类转换为基本数据类型需要我们手动。这里以基本数据类型 Integer转换包装类 int 为例。
//这里的integer是一个Integer对象
int a = integer.intValue();
4.2.2.4自动拆箱(JDK5)
在 jdk5 及以后,实现了自动拆箱工作。
//自动拆箱
int n3 = integer2;//底层使用的是 intValue()方法
自动拆箱:在将一个基本数据类型的值和其对应的包装类对象进行运算时,java会自动调用xxxValue方法,将该对象转化成对应基本数据类型的值
4.2.2.5结论
我们现在使用不需要在手动装箱和拆箱,直接使用就可以
基本数据类型, 和对应的包装类是可以直接在一起运算的。
4.2.3包装类面试题
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); //true
Integer i3 = 129;
Integer i4 = 129;
System.out.println(i3 == i4); //false
}
自动装箱现象:
如果装箱的数据, 在byte的取值范围内 (-128~127),==号比较的结果就是true, 反之是false。
解释原因:
Integer.valueOf();
Integer[] cache = {new Integer(-128), new Integer(-127) .... new Integer(126), new Integer(127)};
public static Integer valueOf(int i) { // 126
if (i >= -128 && i <= 127) {
return IntegerCache.cache[i + 128]; // 254
}
return new Integer(i);
}
参考:
Integer自动装箱的时候会调用valueOf方法。方法的源码中, 会进行一个判断, 判断装箱的数据是否在 -128~127之间:
在 : 会从底层的缓存中取出对象进行使用。 不在 : 会创建出一个新的对象。
底层的缓存实际上是一个Integer类型的数组, 名字叫做cache, 内部存储了 -128~127 之间所有的Integer对象。如果装箱的数据在范围中, 就会从缓存中取出已有的对象使用, 避免创建太多重复的对象。
4.2.4常用方法
4.2.4.1Integer的常用方法
方法名 | 说明 |
---|---|
public static String toBinaryString(int i) | 得到二进制 |
public static String toOctalString(int i) | 得到八进制 |
public static String toHexString(int i) | 得到十六进制 |
public static int parseInt(String s) | 将字符串类型的整数转成int类型的整数 |
4.2.4.1.1进制转化(了解即可)
private static void method() {
int number = 12;
System.out.println(Integer.toBinaryString(number));
System.out.println(Integer.toOctalString(number));
System.out.println(Integer.toHexString(number));
}
4.2.4.1.2parseInt
public static void main(String[] args) {
String s = "123";
System.out.println(Integer.parseInt(s) + 100); // 223
}
public static int parseInt(String s); 将传入的字符串转换为数字。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)