- 为什么要有包装类
因为java是面向对象的编程语言,但8种基本数据类型不属于对象,但java中在设计很多API,新的特性等,不支持基本数据类型,只支持对象,为了解决这一问题,java中为8种基本数据类型配上包装类
1.基本数据类型及其对应的封装类
基本 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
-
装箱与拆箱
装箱:把基本数据类型的数据 包装成 包装类的对象
拆箱:把包装类的对象 拆解成 基本数据类型的数据
自动装箱:当把基本数据类型的值,赋值给包装类的变量时,就会自动装箱
自动拆箱:把包装类的对象赋值给对应的基本数据类型的变量时,就会自动拆箱
注意:自动装箱和自动拆箱都发生在对应类型上//装箱操作 float num1=14.2f; Float obj1=new Float(num1); //手动装箱 Float obj1=num1; //自动装箱(JDK1.5引入) //拆箱操作 Integer obj2=new Integer(10); int num2=obj2.intValue(); //手动拆箱 int num2=obj2; //自动拆箱
-
包装类中的常用API
以Integer为例,其余都相似
(1)把字符串转换为int值
Integer.parseInt(String s)
Integer.valueOf(String s)int num1=Integer.parseInt("123"); double num1=Double.parseDouble("123.4") int num1=Integer.valueOf("123"); //先转成Integer对象,后拆箱为int double num1=Double.valueOf("123.4");
(2)进制转换
Integer.toBinaryString(10) 转为二进制
Integer.toOctalString(10) 转为八进制
Integer.toHexString(10) 转为十六进制
(3)常量值
MAX_VALUE
MIN_VALUE
(4)转大写:Character.toUpperCase(‘a’)
转小写:Character.toLowerCase(‘A’)
-
包装类对象的缓存问题
自动装箱这种情况:
Byte,Short,Integer,Long:都有缓存对象 -128~127
Float,Double无缓存对象
Character:0~127
Boolean:false,true
注意:对象比较地址必须是同一种类型或者是有父子关系;封装对象和基本数据类型(不管是不是同种类型)比较时会自动拆箱Integer a=1; Integer b=1; System.out.println(a==b); //true (a==b比较的是地址值,a和b指向的是同一个缓存的常量对象) Integer a=130; Integer b=130; System.out.println(a==b); //false(a和b是在堆中新建的Integer对象)