一、自动装箱和自动拆箱
自动拆箱和装箱是从JDK5.0才开始有的,它方便了基本数据类型和其对应的包装类型之间的转换。
将一个基本数据类型的值赋给其所对应的包装类型称为装箱;将一个基本数据类型包装类类型的值赋给其所对应的基本数据类型称为拆箱,由于装箱和拆箱的过程是自动进行的非人为转换,所以称作为自动装箱和拆箱。
public class Test{
public static void main (String[] args){
Integer i=50;//自动装箱
System.out.println(i);//输出结果50
int j=i;//自动拆箱
System.out.println(j);//输出结果50
}
}
/*简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自
动将包装器类型转换为基本数据类型。*/
自动拆箱和装箱的过程由编译器自动完成:通过包装类的valueOf方法将基本数据类型包装成引用类型;通过包装类对象xxxValue方法将引用类型变为对应的基本类型,所以上页代码经过编译器编译后为:
public class Test{
public static void main (String[] args){
Integer i=Integer.valueOf(50);
System.out.println(i);
int j=i.intValue;
System.out.println(j);
}
}
下面我们来看看需要装箱拆箱的类型有哪些:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
二、包装类数据缓存
Java对部分经常使用的数据采用缓存技术,即第一次使用该数据则创建该数据对象并对其进行缓存,当再次使用等值对象时直接从缓存中获取,从而提高了程序执行性能。
public class Test{
public static void main (String[] args){
Integer i=50;//声明变量i,通过自动装箱赋值
Integer j=50;//声明变量j,通过自动装箱赋值
System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为true
}
}
Java中只是对部分基本数据类型对应包装类的部分数据进行了缓存:
public class Test{
public static void main (String[] args){
Integer i=128;//声明变量i,通过自动装箱赋值
Integer j=128;//声明变量j,通过自动装箱赋值
System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为false
}
}
- byte、short、int和long所对应包装类的数据缓存范围为 -128~127(包括-128和127)
- float和double所对应的包装类没有数据缓存范围;
- char所对应包装类的数据缓存范围为 0~127(包括0和127);
- boolean所对应包装类的数据缓存为true和false;
基本数据类型和基本数据类型封装型进行“==”运算符的比较时,基本数据类型封装型会先自动拆箱变为基本数据类型后再进行比较。
public class Test{
public static void main (String[] args){
int i=128;//变量i为基本数据类型
Integer j=128;//创建对象j,通过自动装箱赋值
System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为true
}
}
三、==和包装类中equals方法
-
Java中的==有两种作用:如果是基本数据类型则用于判断其值是否相等;如果为引用类型则用于判断两者的地址是否相同。
-
基本数据类型包装类中的equals方法用于比对相同包装类中的值是否相等,如果两者比较的包装类类型不同则返回false。
public class Test{
public static void main (String[] args){
Integer i=128;//声明变量i
Integer j=128;//声明变量j
System.out.println(i==j);//结果为false
System.out.println(i.equals(j));//由于两者值都是128,并且都是Integer类型,结果为true
}
}
四、包装类中parseXXX方法
基本数据类型包装类中的parseXXX(String s)方法用于将字符串类型数据转换为相应的基本数据类型;
public class Test{
public static void main (String[] args){
int a=Integer.parseInt("-128");
System.out.println(a);//输出-128
long b=Long.parseLong("127");
System.out.println(b);//输出127
float c=Float.parseFloat("9.99");
System.out.println(c);//输出9.99
boolean d=Boolean.parseBoolean("true");
System.out.println(d);//输出true
}
}
另外:char类型包装类Character没有相应的parseXXX方法。