目录
此篇文章需要用到以下内容:
什么是包装类?
包装类的本质是一个类,是基本数据类型和相关方法的封装,包装类中的方法简便了工作,提高了代码的简洁性,丰富了代码功能。
128陷阱
public static void main(String[] args) {
Integer a1=10;
Integer a2=10;
System.out.println(a1==a2);
Integer a3=1000;
Integer a4=1000;
System.out.println(a3==a4);
}
程序输出:
出现上述现象的原因:
Integer类的原理:有一个valueof()方法,计算机将-128~127之间的数值存储到一个catch数组中,该数组相当于一个缓存,亦可理解为操作系统中的页存储的快表。
因为Integer属于类,属于引用类型,所以用此类型存储的变量用==判断比较的是两者的地址。
数据在-128~127之间,会直接返回该值在catch数组中的地址。如此而言,在-128~127之间的相同的数值用==判断的结果为true。
若数据没有在-128~127这个区间,计算机需要重新开辟新的内存空间进行存储,继而用==判断的结果为false。
以上为128陷阱以及原理的解答。
自动装箱\拆箱
自动装箱是将变量自动转化为包装类对象的过程。
Integer b=20;//Integer b=Integer.valueOf(20);
以上为自动装箱的代码分解。
自动拆箱是在值传递的过程中将包装类变量自动转化为相应类的过程。
Integer b=20;
int a =b; //int a = b.intValue();
以上为自动拆箱的代码分解。
包装类及自动拆装箱的例子演示
int a=10;
int b=10;
Integer a1=10;
Integer b1=10;
Integer a2=new Integer(10);
Integer b2=new Integer(10);
System.out.println(a==b);
System.out.println(a1==b1);
System.out.println(a2==b2);
System.out.println(a1==b);
System.out.println(a1.equals(a));
System.out.println(a1==a2);
System.out.println(a==a2);
程序输出:
程序分析:
System.out.println(a==b);
输出:true
创建存储类型为int且值都为10的两个变量,此时用==判断是判断两者值是否相同,很明显,两者值相同。
System.out.println(a1==b1);
输出:true
创建存储类型为integer类型且值都为10的两个变量,是在数组当中找数据,且两者共用一个地址。
System.out.println(a2==b2);
输出:false
new开辟了新的内存空间。
System.out.println(a1==b);
输出:true
包装类和基本数据类型用==进行判断时会自动拆箱。
System.out.println(a1.equals(a));
输出:true
包装类和基本数据类型用equals()进行判断时会自动拆箱。
System.out.println(a1==a2);
输出:false
new开辟了新的内存空间。
System.out.println(a==a2);
输出:true
包装类和基本数据类型用==进行判断时会自动拆箱。
到此,此篇文章结束。