java包装类和基本类的分析(以Integer来介绍)

1.Integer类型的对象保存在堆中,引用保存在栈中。而int类型的数直接保存在栈中。
2.用==比较
Integer i1=1;
Integer i2=1;
Integer i11=128;
Integer i22=128;
Integer i3=new Integer(1);
Integer i4=new Integer(1);
int i5=1;
int i6=1;
//----------分类比较
System.out.println("i1=i2:"+(i1==i2));//true比较的是引用,因为有个装箱的过程,而装箱的时候会有一个1---127的缓存
System.out.println("i11=i22:"+(i11==i22));//false大于128了,所以不等
System.out.println("i3==i4:"+(i3==i4));//false比较的是栈里的引用,包装类型只要有new就会创建一个新的对象和引用,故为false
System.out.println("i5==i6:"+(i5==i6));//true比较的栈里的值,所以相等
//--------互相比较
System.out.println("i1=i5:"+(i1==i5));//true比较的时候先拆箱后比较,故相等
System.out.println("i1=i3:"+(i1==i3));//false比较的引用,i1走的是装箱流程,i3是new出来的,故不等
System.out.println("i3==i5:"+(i3==i5));//true较的时候先拆箱后比较,故相等
3.用equals比较
首先int和int是不能用equals进行比较的
然后其他的全部为true
我们来看一下Integer的equals方法是怎么写的
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
}
比较两个对象的alue,如果传进来的参数是基本数据类型就会有一个装箱的过程,所以结果全部为true。


猜你喜欢

转载自zsxzmxg.iteye.com/blog/2269407