十二、int、Integer、String转化、整型常量池
1、int Integer String三种类型之间相互转化
public class IntegerTest03 {
public static void main(String[] args) {
//1.int--->Integer
Integer i1=Integer.valueOf(10);
System.out.println(i1);//10
//2.String--->Integer
Integer i3=Integer.valueOf("20");
System.out.println(i3);
//2.Integer--->int
int i2=i1.intValue();
System.out.println(i2);
//4.Integer--->String
String s3=i3.toString();
System.out.println(s3);
//5.String--->int
int i4=Integer.parseInt("123");
System.out.println(i4);
//6.int--->String
String s4=i4+"";
System.out.println(s4);
}
}
2、自动装箱和自动拆箱
1)自动装箱和自动拆箱是程序编译阶段的一个概念和程序运行无关,主要目的是为了方便程序员的编码
2)jdk5.0的新特性:
在jdk5.0以前,包装和基本类型做运算时,必须将包装类转化成基本类型才可以,而jdk5.0提供Auto-boxing/unboxing(自动拆箱和拆箱)
public class ZhuangXiangheChaiXiang {
public static void main(String[] args) {
//jdk5.o之前的
//int--->Integer(装箱);
Integer i1=new Integer(10);
//Integer---int (拆箱)
int i2=i1.intValue();
//jdk5.0版本之后
Integer i3=20;//自动装箱
int i4=i3;//自动拆箱
m1(90,30);//自动装箱
System.out.println(m1(90,30));
System.out.println(m1(90,30)+i3);//自动装箱
}
public static int m1(Integer i,Integer j){
return i-j;//自动拆箱
}
}
3、整型常量池
如果数据是在-128~127之间,java中引入了“整型常量池”,所以在该范围内,其内存地址是一样的。“整型常量池”是缓存技术,从-128~127之间的数据用的比较多,所以为了方便程序员调用,提高程序的执行效率, 凡是在-128~127之间的数据都会存储在整型常量池中,在方法区中存储,并且是一个数组,数组大小长度固定。
public class IntegerTest04 {
public static void main(String[] args) {
Integer i1=new Integer(10);
Integer i2=new Integer(10);
//此处不会自动拆箱成int类型后去比较i1和i2的值
System.out.println(i1==i2);//false
//Integer类重写了Object类的equals方法
System.out.println(i1.equals(i2));//true
Integer i3=128;
Integer i4=128;
System.out.println(i3==i4);//false
/*以上程序的在执行的时候相当于:
Integer i3=new Integer(128);
Integer i4=new Integer(128);//所以上述结果为false
*/
Integer i5=127;//这个程序不会在堆中创建对象,会直接从整型常量池中拿。
Integer i6=127;
System.out.println(i5==i6);//ture
}
}