包装类
包装类
Java是一门面向对象的语言,但是Java的八种基本数据类型却没有对象的特征,更没有对象的功能(没有属性,不能调用方法)
基本数据类型不能调用方法,这就给我们很多的操作带来不便,另外容器(例如List、HashMap等)基本接收存储的都是
Object,不能接收基本数据类型。为了解决这个问题我们就要把所谓的基本数据类型包装成对象,使其具有对象的特征来方便使用
拆箱与装箱
| 基本类型 | 包装类型 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| Double | Double |
| boolean | Boolean |
装箱与拆箱
//首先创建一个基本类型数据
int age = 10;
//装箱
Integer integer1 = new Integer(num);
//拆箱
int age2 = integer1.intValue();
自动装箱和拆箱
int id = 01;
//自动装箱
Integer integer2 = id;
//自动拆箱
int age = integer2;
注意点:
- 自动拆箱和自动装箱实现其实是一样的,我们使用idea的反编译class文件就能发现,只是jvm在编译的时候帮你做了这些操作。
基本类型和字符串转换
基本类型转换为字符串类型
方法1:
int age 10;
String str = age + "";
方法2:
int age = 10;
String str = Integer.toString =(age);
字符串类型转换为基本类型
String str = "12";
int num = Integer.parseInt(str);
注意:字符串转换为基本数据类型只能是纯数字,不然会报错


Boolean字符串形式转换成基本类型
String string = "true";
boolean b1 = Boolean.parseBoolean(string);
System.out.println(b1);
注意点:这个布尔类型的数组为true则返回的是true,如果是其他的就是false。
需保证类型兼容性,否则抛出NumberFormatException异常
整数缓冲区
Java预先创建了256个常用的整数包装类型对象
面试题:
//这两个Integer对象相等吗?
Integer i1 = new Integer(100);
Integer i2 = new Integer(100);
System.out.print(i1 == i2);
答案当然是false,地球人都知道,它new了一个对象,所以内存地址是不一样的
Integer i3 = 100;
Integer i4 = 100;
System.out.print(i3 == i4);
这样的输出结果我可以很明确的告诉你是true
因为在class文件里,也就是在编译的过程中,i3 = 100;不是new Integer(100);而是调用了Integer类里的Integer.valueOf();
所以他们比的是值。
Integer i5 = 200;
Integer i6 = 200;
System.out.print(i5 == i6);
这一代码输出结果则是false,很奇怪,和上面的那个代码一样,为什么是false。
这就和整数的缓冲区有关系了,我们走进Integer的valueOf方法看看源码

这里有两个数,一个是low,一个是high,定义的一个是-128一个是127那么我这里输出的是200,不在他的缓冲区,那么就会返回一个new Integer(i)。那和第一个比方式是一样的。
整数缓冲区能减少一些不必要的内存浪费
努力做一个技术流

浙公网安备 33010602011771号