包装类
java语言是面向对象的语言,而基本数据类型的数据不是对象,但是,有的时候我们需要研究使用基本数据类型的数据,需要将之转换成对象来使用。 这个时候,我们可以将基本数据类型包装成 引用类型。
每一个基本数据类型都对应一个包装类:
特点:
(1)都是final修饰的
(2)一经创建的对象里的数据不可变
常用构造器:
Integer(int value) 通过指定的基本数据类型的数据构建一个Integer对象
Integer(String str) 通过指定的字符串的数据构建一个Integer对象
常用方法:
int intValue() 作用是将包装类的对象拆箱成基本数据类型
static int parseInt(String s) 作用是将字符串转成10进制的基本数据类型
static Integer valueOf(String s) 作用是将字符串转成Integer对象
常量池:
jvm在使用字符串类型时,为了提高内存的使用率,当使用字面量(常量),进行给变量赋值时,在方法区内提供了用于存储字面量对象的一个常量池。
当将基本数据类型进行自动装箱时,装箱后的对象的字面值,如果是在-128~127之间,会先检查常量池中是否有相同字面值的对象,如果有,则将常量池的对象的地址给引用变量。(浮点类型没有常量池)
原理:当使用字面量赋值时,先去方法区内的常量池中查询是否有相同字面量的对象,如果有,就返回常量池中对象的地址,没有的话,在常量池中创建此字面量的对象再返回。
注意:将字符串转成基本数据类型时,有可能出现运行时异常: java.lang.NumberFormatException
JDK1.5以后支持自动装箱和拆箱
练习代码
public static void main(String[] args) {
//构建一个Integer对象,封装 数字5
Integer obj1 = new Integer(5);
Integer obj2 = new Integer("5");
/*
* 装箱:将基本数据类型包装成引用类型
* 拆箱:将包装类型的对象拆箱成基本数据类型
* */
/* 调用拆箱方法,将obj1转成基本数据类型*/
System.out.println(obj1);
int v1 = obj1.intValue();//拆箱
/* 调用装箱方法,将10转成Integer对象*/
Integer i = Integer.valueOf(10);//装箱,变成引用类型
/*将字符串"100"转成基本数据类型*/
int v2 = Integer.parseInt("100");
System.out.println(v2);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}