包装类与基本数据类型
包装类:可以让基本数据类型获取跟对象一样的属性和特征,行使对象的相关权益
命名:大部分包装类的命名是它的基本类型的名称首字母大写(如float-Float,byte-Byte),但有两个特例,int对应的包装类Integer,以及char对应的包装类Character
包装类常用方法
包装类都是final修饰的,不能被继承。
所有的数值型包装类(Integer Byte Short Long Float Double )直接父类都是Number类;
字符型和布尔型(Character Boolean)直接父类为Object类;
每个包装类有很多方法,去甲骨文官网去看API
基本数据类型和包装类之间的转换
1、每一种基本数据类型都应该有对应的对象类型,方便对基本类型进行操作。包装类型可以解决一些 基本类型解决不了的问题,如有时候需要传递一个Object变量 而你想传递int类型的进去显然不行, 这就要用到包装类。
2、集合不允许存放基本类型数据,只能存放包装类型。
装箱:把基本数据类型转换成包装类
(1)自动装箱:不用实例化,直接赋值;int t1=2; Integer t2=t1;
(2)手动装箱:实例化,构造函数的方法
int t1=2; Integer t3=new Integer(t1);
4.拆箱:把包装类转换成基本数据类型
(1)自动拆箱:int t4=t2;
(2)手动拆箱
int t5=t2.intValue();
编程练习1
请按照编辑器中的注释,在对应的空白区域填写对应的代码,完成基本数据类型和包装类之间的转换。
程序运行参考效果图如下:
package me.feihong.wrap;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 定义int类型变量,值为100
int score = 100;
// 创建Integer包装类对象,表示变量score1的值
Integer score1=score;
// 将Integer包装类转换为double类型
double score2=score1.doubleValue();
// 将Integer包装类转换为long类型
long score3=score1.longValue();
// 将Integer包装类转换为int类型
int score4=score1.intValue();
//打印输出
System.out.println("score对应的Integer类型结果为:"+score1);
System.out.println("score对应的double类型结果为:"+score2);
System.out.println("score对应的long类型结果为:"+score3);
System.out.println("重新由Integer转换为int类型的结果为:"+score4);
}
}
基本数据类型和字符串之间的转换
//1. 基本数据类型转换为字符串:
int t1 = 2;
String t2 = Integer.toString(t1);
//2. 字符串转化为基本数据类型
int t3 = Integer.parseInt(t2);
//或者:
int t4 = Integer.valueOf(t2);
编程练习2
请按照编辑器中的注释,在对应的空白区域填写对应的代码,完成基本数据类型和包装类之间的转换。
程序运行参考效果图如下:
package me.feihong.wrap;
public class TestTwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
double a = 12.5;
//将基本类型转换为字符串
String str1 =Double.toString(a)+10;
System.out.println("a 转换为String型后+10的结果为: "+str1);
String str = "2.8";
// 将字符串转换为基本类型
double b =Double.valueOf(str)+10;
System.out.println("str 转换为double型后+10的结果为: "+b);
}
}
需要知道的几点知识
1.包装类的默认值是null
在包装类当中实现自动拆装箱背后的秘密:
我们直接给包装类赋值实现自动装箱,实际上编译器是做了这些工作:
1.调用valueOf();方法,在这个方法执行时Java中提供了对象池,如果数据大小在-128--+127之间就可以装进这个池子(很明显这个是个8位缓存器)。
2.当你给包装类赋值时,它会在对象池里先查找存不存在这样的一个对象,如果有,就让现在这个对象也指向这个内存空间,直接产生
3.如果超出范围,或者池子里原来没有相同的对象,编译器就会new开辟一个空间
8种基本数据类型对应的包装类中,Double和Float不具备常量池概念。
编程练习3
请按照编辑器中的注释,在对应的空白区域填写对应的代码,完成基本数据类型和字符串之间的转换。
程序运行参考效果图如下:
package me.feihong.wrap;
public class TestTwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义float类型变量,赋值为88.99
float f1 = (float)88.99;
//将基本类型转换为字符串
String str1=Float.toString(f1)+20;
//打印输出
System.out.println("f1转换为String型后与整数20求和的结果为:"+str1);
//定义String类型变量,赋值为"188.55"
String str = "188.55";
// 将字符串转换为基本类型double
double t1=Double.valueOf(str)+20;
//打印输出
System.out.println("str转换为double型后与整数20的求和结果为:"+t1);
}
}