文章目录
前言
今天我们来学习一下包装类
一、包装类是什么?
Java的包装器类提供了将原始类型转换为对象类型的机制。
从J2SE 5.0开始,自动装箱和自动拆箱功能实现了将原始类型转换为对象类型,并将对象类型自动转换为原始类型。
二、包装类的类型
我们学习的Java有8中基本数据类型,因此sun公司也给我们提供了8中包装类一一对应,显然这里是将基本类型包装起来的类。包装类的作用就是将基本类型转成对象,将基本类型作为对象来处理。
很显然八个基本数据类型衍生出来的包装类都是属于Java中的Number类中的,并且Number类数据Object这个老祖宗
一、包装类的构造方法?
1.Integer的构造
package pack;
public class test09 {
public static void main(String[] args) {
Integer a=new Integer(10);
System.out.println(a);
}
}
这里的包装类的构造和普通类的构造别无二致
运行结果如下
"C:\JetBrains\IntelliJ IDEA 2019.2.4\jbr\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=61416:C:\JetBrains\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath C:\IdeaProjects\heima169work\out\production\day21 pack.test09
10
运行结果也和我们猜想一致
2. 128!=128?
让我们先上代码
package pack;
public class test06 {
public static void main(String[] args) {
Integer a=127;
Integer b=127;
System.out.println(a==b);//true
/*
Java为了提高效率将-127到128之间的所有包装对象提前创建好,放到一个方法区"整数型常量池"当中,目的是为了只要用这个区间里的数据
就不需要再new,直接取出来就行
*/
Integer c=128;
Integer d=128;
System.out.println(c==d);//false
}
}
如图所示,我构建了四个变量a,b,c,d其中a和b都是127但是c和d都是128
在数学角度来看,a=b,c=d但是我们运行一下试试
"C:\JetBrains\IntelliJ IDEA 2019.2.4\jbr\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=61592:C:\JetBrains\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath C:\IdeaProjects\heima169work\out\production\day21 pack.test06
true
false
我们发现个很有趣的现象,就是a确实等于b但是c!=d,这个在我们常识里面看来是错误的非法的,但是idea编译结果总不会骗我们吧
后来经过查阅资料可知
这是因为int基础类最大只能为127,在它的对象类中-128到127的数保存在静态区,而大于127的数保存在对象区,所以直接比较,相当于比较他们的地址,所以就是不相等的,但是比较他们的内容确实一样的,Java为了提高效率将-127到128之间的所有包装对象提前创建好,放到一个方法区"整数型常量池"当中,目的是为了只要用这个区间里的数据就不需要再new,直接取出来就行。
sun公司为了避免我们再以后的项目中能够多节约点堆内存空间可谓煞费苦心哈哈哈
三、包装类的自动装箱和拆箱
1.sun公司提供的方法
由于我们最常用到的就是String和int的基本数据类型,所以我在这里就只是简单得到介绍一下他们的拆箱和装箱机制
//int-->Integer
//自动装箱
Integer x=10;
//Integer-->转换为int
int y=x;
Integer i= new Integer(123);//基本数据类型转换为引用数据类型(装箱)
float f=i.floatValue();//引用数据类型转换为基本数据类型(拆箱)
sun公司给我们编写了自动装箱和自动拆箱机制,我们不需要直接编写方法,大部分基本数据类型的自动装箱和自动拆箱都差不多,感兴趣的好兄弟可以自己去尝试一下
2.自己编写的装箱和拆箱方法
我们也可以尝试自己来编写装箱和拆箱方法
package pack;
public class myint{
int value;
public myint() {
}
public myint(int value) {
this.value = value;
}
//重写tostring方法
public String toString(int value) {
return String.valueOf(value);
//将int类型转换为字符串类型输出(valueOf)
}
}
package pack;
public class test01 {
public static void main(String[] args) {
myint myInt=new myint(100);
dosome(myInt);
}
public static void dosome(myint obj){
System.out.println(obj.toString());
}
}
在重写的过程中记得重写toString方法,养成一个好习惯,或者直接调用idea帮忙重写也行
四、包装类的相互转化
这里我们就先了解这些常用的类型的转换,其他的好兄弟们有兴趣可以自己去试试
接下来看看具体操作
//String转换成Integer
Integer i=new Integer("123");
System.out.println(i);
Integer a=new Integer(123);
System.out.println(a.toString());//将int转换为Integer
接下来了看看运行结果
"C:\JetBrains\IntelliJ IDEA 2019.2.4\jbr\bin\java.exe" "-javaagent:C:\JetBrains\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=62464:C:\JetBrains\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath C:\IdeaProjects\heima169work\out\production\day21 pack.test04
123
123
很显然是符合我 的猜想的,说明我们的相互转换对了
当然兄弟们也可以去试试其他的
这些都可以尝试一下玩玩啊
总结
包装类是一种将基本数据类型转换为引用数据类型的工具,但是sun公司已经帮我们写好了转换的方法了,所以这个用起来很容易
今天就是5.20啦,祝各位表白成功,感情顺顺利利哦