包装类
一.概述
- 基本数据类型所对应的引用数据类型
栈中存放堆中对象的地址,基本类型数据不含任何属性和方法,为使其拥有更加强大的功能,开发者对八大基本数据类型提供了包装类(引用数据类型)。
- Object可统一所有数据,包装类的默认值是null。
- 八大基本数据类型对应的包装类
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
包装类将基本类型的值包装在一个对象中。一个 该类型的对象只包含一个为 基本类型 的字段。
二.类型转换与装箱,拆箱
- 装箱:把基本类型转换为引用类型(栈里的数据存放进堆);拆箱:把引用类型转换为基本类型(堆里的数据存放进栈)
- 8种包装类提供不同类型间的转换方式:
- Number父类中提供的六种共性方法。
- parseXXX()静态方法(拆箱)
- valueOf()方法(装箱)
//装箱,基本类型转成引用类型
int num1 = 18;
//使用Integer类创建一个对象
//API核心文档中Integer类的构造方法
Integer integer1 = new Integer(num1);//Integer(int value)
//valueOf方法
Integer integer2 = Integer.valueOf(num1);
System.out.println(integer1);
System.out.println(integer2);
//拆箱:引用类型转换为基本类型
Integer integer3 = new Integer(100);
int num2 = integer3.intValue();
System.out.println(integer3);
//JDK1.5之后java当中提供了自动装箱和拆箱功能
int age = 30;
//自动装箱
Integer integer4 = age;
//自动拆箱
int age2 = integer4;
System.out.println(integer4);
System.out.println(age2);
输出结果:
18
18
100
30
30
//基本类型和字符串之间的转换
int n1 = 15;
//1.使用+号
String s1 = n1 + "";
//2.使用Integer中的toString方法
String s2 = Integer.toString(n1);
String s3 = Integer.toString(n1,16);//表示n1=15为十六进制表示,返回对应十六进制数f
Integer.toBinaryString(n1);//二进制
Integer.toHexString(n1);//十六进制
Integer.toOctalString(n1);//八进制
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
//字符串转换为基本类型
String s4 = "150";//字符串中只能含数字,含非数字数据会报异常
//使用Integer.parse()
int i1 = Integer.parseInt(s4);
System.out.println(i1);
//boolean字符串类型转换为基本类型“true”-->true
String str1 = "true";//字符串非true输出均为false,不会出现异常
boolean b1 = Boolean.parseBoolean(str1);
System.out.println(b1);
输出结果:
15
15
f
150
true
三.整数缓冲区
- java预先创建了256个常用的整数类型包装类对象
- 在实际运用中对已创建的对象进行复用
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);//false
Integer integer3 = Integer.valueOf(100);//true
Integer integer4 = Integer.valueOf(100);
System.out.println(integer3==integer4);
Integer integer5 = Integer.valueOf(200);//false
Integer integer6 = Integer.valueOf(200);
System.out.println(integer5==integer6);
- integer1和integer2使用的Integer(value)构造方法
- integer3,integer4,integer5,integer6使用的Integer.valueOf()方法
- Integer.valueOf()说明:在堆中已经创建了一个IntegerCache的数组存储了从-128到127的所有对象,若value在这之间则直接指向,否则新创建一个Integer对象
-
integer3,integer4:在范围内直接指向,引用相同,输出为true
-
integer5,integer6超出范围,new一个新的Integer对象,引用不同,输出为false
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!