什么是包装类,包装类就是基本类型的所对应的引用类型数据,每种基本类型都对应的都有一个包装类。
Object可以统一所有数据,包装类的默认值是null。
包装类在Java.lang包下的
基本类型数据 | 对应的包装类 |
byte | Byte |
char | Character |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
基本类型数据都是在栈里的,而它们的包装类可以将他们包装成引用类型在堆里开辟一个空间。
我们一般定义的基本类型的变量想要去运算只能用运算符(加减乘除)来运算,也不能调用方法:只能出现这个关键字之类的,
而包装类定义的就可以调用一些方法: (包装过后的基本数据类型我个人理解就是变成了对象在堆里开辟了一个空间,所有也可以通过对象调用类的方法)
类型转换,装箱与拆箱:
类型转换:基本类型转换成包装类,这个过程就是类型的转换。
装箱:装箱就是将基本类型转换成包装类的这么一个过程称之为装箱。
拆箱:拆箱就是将包装类的引用类型的对象转换为基本类型。
例:
package BaoZhuangLei;
public class Test {
public static void main(String[] args){
//装箱操作:基本类型转换为引用类型
int n = 10;
//使用Integer类创建对象
Integer integer1 = new Integer(n);//使用包装类的构造方法进行装箱
Integer integer2 = Integer.valueOf(n);//使用包装的类方法进行装箱
System.out.println(n);
System.out.println("装箱");
System.out.println(integer1);
System.out.println(integer2);
System.out.println("----------------------------");
//拆箱:引用类型转换为基本类型
Integer integer3 = new Integer(99);
//使用包装类的拆箱方法将引用类型转换为基本类型
int n1 = integer3.intValue();
System.out.println(integer3);
System.out.println("拆箱");
System.out.println(n1);
System.out.println("----------------------------");
//JDk1.5之后,提供了自动装箱和拆箱
int n2 = 90;
//自动装箱演示
Integer integer = n2;//自动装箱完成
System.out.println(n2);
System.out.println(integer);
System.out.println("自动装箱完成");
//自动拆箱
int n3 = integer;//自动拆箱结束
System.out.println(n3);
System.out.println("自动拆箱结束");
}
}
运行结果:(自动装箱和拆箱其实系统帮我们自动将装箱和拆箱的方法给补进去了,这样就会给我们节约时间,代码量也会少)
字符串和基本类型的转换:
parseXXX()静态方法(XXX是指一种类型,比如:int,float类型)这个方法可以实现字符串和基本类型的转换
package BaoZhuangLei;
//parse()方法练习
public class parse {
public static void main(String[] args){
//基本类型和字符串类型之间的转换
//1.基本类型转字符串
int n1 = 99;
//1.1第一种方式使用加号来实现
String s1 = n1+"";
System.out.println(s1);
//1.2使用Integer中的tosString()方法
String s2 = Integer.toString(n1);
System.out.println(s2);
//2.字符串类型转基本类型
String str = "100";
//使用Integer。parse()方法。
int i = Integer.parseInt(str);
System.out.println(i);
}
}
运行结果:
字符串类型转基本类型时要注意字符串内除了数字不用出现别的字母之类的否则转换会报错
运行结果:报错了
扩充:boolean字符串形式转换为基本类型boolean值的时候,只有"true"转换之后就是true,只要不是 "true"都是false。
//3.boolean字符串形式转换成基本类型"true"-->true,"true"-->false
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);
运行结果:
当我们不小心将true拼错了,再运行一下看看
运行结果:
整数缓冲区(Integer缓冲区):
Java预先在堆里创建了256个常用整数的包装类对象。
翻译成通俗的话就是我们平时经常会用到的XXX--XXX的整数在我们整数包装类中(Integer)已经提前在内存中预设好了,我们创建的对象赋值的数字只要是在这个范围内的就之间指向内存中这个数就可以了,超过预设的256个数会在内存中重新开辟空间储存。(缓冲区数字的区间是-128-127)
这预设数字的内存就是缓冲区。(整数缓冲区可以节约内存)
例:
package BaoZhuangLei;
//整数缓冲区(Integer缓冲区)
public class HuanChongQu {
public static void main(String[]args){
//练习(面试也会面到)
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
/*这里主动new出来的对象在堆中又开辟了空间储存对象的值
这时候对比的话就对比的两个对象的地址,
new关键字是调用了构造器(new关键字会在储存空间开辟新的空间储存对象)
这里为false
*/
System.out.println(integer1 == integer2);
/*
这里是自动装箱;系统会在整数缓冲区内优先找到对应的数字内存
在缓冲区内找到预设的有这个数字,对象会直接指向缓冲区的这个
数字的内存
自动装箱调用的是:Integer.valueOf()方法
这里为:true
*/
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3==integer4);
/*
这里为:false
因为200已经超过了预设数字的上线了,自动装箱会在内存中重新开辟空间储存对象
两个对象的地址不一样了所有为false
*/
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5 == integer6);
}
}
运行结果: