Java中Integer和int的区别

int 是基础类型,Integer是引用类型,是int的包装类型。
int使用的是值传递。Integer使用的是引用传递。

java的基础类型都有对应的包装类型。

因为int是基础类型,所以int是分配在常量区。Integer是引用类型,所以它是分配在堆里面的。

类装载的时候,在类加载阶段。会将int类型的变量赋值为0 ,如果初始化阶段没有赋值的话,那么int类型的变量的初始值就是0 。 对于对象类型,在类加载阶段,会赋值为null, 所以在初始化阶段如果没有指定值的话,那么Integer类型的变量初始的值就是null。

使用int类型有3种方式

//直接声明变量赋值。
int i = 1;
//这里由于自动装箱拆箱,所以可以直接将值赋值给对象。
//这里编译过后会变成 Integer i1 = Integer.valueOf(1);
Integer  i1 = 1;

//使用new创建对象。
Integer i2 = new Integer(1);

int和Integer的对比如下

public static void main(String[] args) {

    int i1= 1;
    Integer i2 = 1;
    Integer i3 = new Integer(1);


    //true 因为i2会被自己拆箱成1
    System.out.println( i1 == i2);

    //true 因为i3会被自己拆箱成1
    System.out.println( i1 == i3);

    //false 因为Integer会自动在类加载的时候,自动生成一个Integer数组,保存着 -128 ~ 127 的对象
    //i2 会被编译成 i2= Integer.valueOf(1); valueOf方法会去获取预先缓存的 -128 ~ 127 对象。
    // 所以这里判断的是 i2(这个在加载阶段就创建的Integer对象) 和 i3(在执行阶段才创建的对象) 是否同一个对象,当然不是同一个对象。
    System.out.println( i2 == i3);


    Integer i4 = 2;
    Integer i5 = 2;

    //true 因为i4 和 i5 都是Integer类缓存的对象。
    System.out.println(i4 == i5);


    Integer i6 = 128;
    Integer i7 = 128;

    //false ,因为i6 和 i7都大于127。所以是new出来的对象,而不是缓存的对象。
    System.out.println(i6 == i7 );


    Integer i8 = new Integer(3);
    Integer i9 = new Integer(3);
    //false i8 和 i9都是new出来的对象,是不同的引用。所以是false
    System.out.println(i6 == i7 );

    //true  equals方法是获取int值进行对比。 他们的值都是3 所以是true
    System.out.println(i8.equals(i9));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值