Integer与int的区别

来源:互联网 发布:我心伤悲 莫知我哀赏析 编辑:程序博客网 时间:2024/06/06 06:45

最近遇到了一个Integer与int相等的判断时有些模糊,不知道怎么写。特地去查询了一下相关的知识。

int是基本类型之一,Integer是引用类型。也就是说int里面存的是一个实实在在的我们赋予的值,而Integer中存储的是我们赋予值得内存或者引用地址,还做了如下实验

public class IntegerTest {
    public static void main(String args[]){
        Integer a=new Integer(1);
        Integer b=new Integer(1);
        int c=1;
        Integer d=1;
        Integer f=1;
        if(a==b){
            System.out.println("a==b为真");
        }
        if(d==c){
            System.out.println("d==c为真");
        }
        if(d==f){
            System.out.println("d==f为真");
        }
        if(d==a){
            System.out.println("d==a为真");
        }
        if(a==c){
            System.out.println("a==c为真");
        }
    }    
}

运行的结果:

d==c为真
d==f为真
a==c为真

可以这样解释,a,b都是封装的数据类型,都使用了new来开辟了一块新的内存,其中存放的地址 ,类似于指针。当直接用==比较的应该直接比较的是内存地址,而不是实际指向的值。当使用equals方法时,比较a和b却为真,说明这个方法比较的是值。当Integer与int想比较的时候,比较的是值比较,这里涉及了Integer的自动拆箱的功能,d==c就为真了,a与c的比较也是这个道理。对于d与f的比较,这个涉及到对于常数,它有一个内存,或者说是缓存,当进行d和f的赋值方式时,会自动去内存中找,如果有,则直接把这块引用地址赋值给Integer类型的数据,这就是d==f的原因了。

补充一点:int的默认赋值为0,而Integer默认赋值为null(引用类型)。

0 0
原创粉丝点击