Java中 Int 和Integer 的区别

来源:互联网 发布:安广网络客服电话 编辑:程序博客网 时间:2024/06/03 16:43

Java中 Int 和Integer 的区别
1. int 是基本数据类型(原始数据类型),直接存数值;integer是int 的封装类,是对象类型
2. int默认值为0,integer默认值为null
3. 范型只支持对象类型
向ArrayList里面add,add的必须是Object而不是int

延伸

public class TestInteger {    public static void main(String[] args) {        int i = 128;        Integer i2 = 128;        Integer i3 = new Integer(128);        //Integer会自动拆箱为int,所以为true        System.out.println(i == i2);        System.out.println(i == i3);        System.out.println("**************");        Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);        Integer i6 = 127;        System.out.println(i5 == i6);//true        Integer i55 = 128;        Integer i66 = 128;        System.out.println(i55 == i66);//false        Integer ii5 = new Integer(127);        System.out.println(i5 == ii5); //false        Integer i7 = new Integer(128);        Integer i8 = new Integer(123);        System.out.println(i7 == i8);  //false    }}

JDK源码的valueOf函数式这样的:

public static Integer valueOf(int i) {    assert IntegerCache.high >= 127;    if (i >= IntegerCache.low && i <= IntegerCache.high)        return IntegerCache.cache[i + (-IntegerCache.low)];    return new Integer(i);}

总结
1. 无论值是否相同,Integer与new Integer都不会相等,结果为false。
2. 两个都是非new出来的Integer,如果数在-128到127之间,值相同则是true,否则为false
Java在编译Integer 的时候,被翻译成 Integer i = Integer.valueOf(值);而valueOf()函数会对-128到127之间的数进行缓存
3. 两个都是new出来的,无论堆上的值是否相同,引用地址不同,结果为false
4. int和integer比(无论是否是new出来的),值相同则是true,否则为false, 因为会把Integer自动拆箱为int再去比

原创粉丝点击