包装类
包装类:
java语言是面向对象的语言,而基本数据类型的数据不是对象
有的时候我们需要研究使用基本数据类型的数据,需要将之转换成对象使用
这个时候,我们可以将基本数据类型包装成引用类型。
每一个基本数据类型都对应一个包装类
byte------->Byte
int-------->Integer
short------>Short
long------->Long
float------>Float
double----->Double
char------->Character
boolean---->Boolean
特点:
1、都是final修饰的
2、一经创建的对象里的数据不可变
常用构造器:
Integer(int value)
通过指定的基本数据类型的数据,构建一个Integer对象
Integer(String str)
通过指定的字符串数据类型的数据,构建一个Integer对象
常用方法:
int intValue();
将包装类的对象拆箱成基本数据类型
static Integer valueOf(String s)
将字符串转换Integer对象
注意:将字符串转换成基本数据类型时,有可能出现运行时异常
java.lang.NumberFormatException
static int parseInt(String s)
将字符串转换成10进制的基本数据类型
JDK1.5以后支持自动装箱和拆箱:
发生了自动装箱操作,相当于调用了Integer.valueOf(5)
5被包装成对象,存在堆中,将地址值给了变量i
发生了自动拆箱操作,相当于i.intValue()
对象i被拆箱成基本数据类型5存储在num空间里
n1发生了自动拆箱即n1.intValue(),变成了基本数据类型
n2发生了自动拆箱即n2.intValue(),变成了基本数据类型
然后进行运算,结果为基本数据类型的30
30再自动装箱,底层调用Integer.valueOf(30)
变成对象n3
引用类型的常量池:
常量池一包是用来存储以字面量赋值的数据,设计常量池为了节省空间,
字面量存储在常量池中,当有别的对象以相同的字面量赋值时,可以直接将地址传给对象
如果常量池中没有想要的数据,那么就在常量池中创建,之后在传给对象
包装类的常量池:
当将基本数据类型进行自动装箱时,装箱后的对象的字面量,如果
是在-128-127之间,会存储在常量池中,如果再有这样的操作时
会先检查常量池中是否有相同字面量的对象
每一个都有自己的常量池
整数类型 -128-127之间
Character 0-127之间
Boolean true false
总结:
1、八种包装类都是final修饰
2、一经创建,对象内容不可变
3、Character和Boolean的父类是Object
其他六种的父类是Number类型
BigDecimal:大数据类型
如果想精确无误差运算,我们可以使用BigDecimal类型:
提供了相应的加减乘除等功能方法进行精确运算。