java自动装箱和拆箱
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。
装箱:将基本类型转换成包装类对象
int i=10;
Integer x=new Integer(i);手动装箱
Integer y=10;自动装箱
拆箱:将包装类对象转换成基本类型的值
Integer j=new Integer(8);
int m=j.intValue();//手动拆箱
int n=j;//自动拆箱
public class Main {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//false
}
}
Integer与Integer比较的时候,由于直接赋值的时候会进行自动的装箱,那么这里就需要注意两个问题,一个是-128<= x<=127的整数,将会直接缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象。二:当大于这个范围的时候,直接new Integer来创建Integer对象。
public class Main {
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2);//false
System.out.println(i3==i4);//false
}
}
为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现呢?很简单:在某个范围内的整型数值的个数是有限的,而浮点数却不是
包装类转换成其他数据类型
> Integer i=new Integer(100);
> double d=i.doubleValue();//转换成double
包装类与字符串之间的转换
1、基本数据类型转换成字符串
使用包装类的toString()方法;
使用String类的valueOf()方法;
使用一个空字符串加上基本类型。
int a=100;
String m=String.valueOf(a);//方法一
String n=Integer.tostring(a);//方法二
String p=a+" ";//方法三
2、字符串转换成基本数据类型
调用包装类的parseXXX()方法;
调用包装类的valueOf()方法转换为基本数据类型的包装类。
String a="8";
int b=Integer.parseInt(a);//方法一
int c=Integer.valueOf(a);//方法二