Java int与Integer的区别

int是基本数据类型;
Integer是int的包装类,是一个类。
例如

/**
 * Created by Poldi on 2017/7/5.
 */
public class IntegerAndint {
    public static void main(String[] args) {
        int i1 = 128;
        Integer  i2 = 128;
        Integer i3 = new Integer(128);
        System.out.println(i1==i2);//true   1
        System.out.println(i1==i3);//true   2
        System.out.println(i2==i3);//false  3
        Integer i4 = 127;
        Integer i5 = new Integer(127);
        Integer i6 = new Integer(127);
        Integer i7 = 127;
        System.out.println(i4==i5);//false  4
        System.out.println(i5==i6);//false  5
        System.out.println(i4==i7);//true   6
        Integer i8 = 128;
        System.out.println(i2==i8);//false  7
        int i9 = 127;
        System.out.println(i4==i9);//true   8
    }
}

在编译时,Integer i2=128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存,Integer.valueOf():

static final int low = -128;
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
  • 1,2,8:  int与Integer比较:Integer与int比较都会自动拆箱.int和integer比,值相同则是true,否则为false, 因为会把Integer自动拆箱为int再去比
  • 3: (Integer 范围在-128-127内)new Integer 引用指向堆 ,Integer 指向专门存放他的内存(常量池)。他们的内存地址不一样,所以无论值是否相同,作比较结果都为false
  • 4: Integer 范围不在-128-127,则编译的时候 Integer.valueOf(值)本质返回的是new Integer()
  • 5: 两个都是new出来的,无论堆上的值是否相同,引用地址不同,结果为false
  • 6,7: Integer 范围在-128-127内,值相同为true,值不同为false。Integer范围不在-128-127,编译的时候 Integer.valueOf(值)本质返回的是new Integer(),new Integer 引用指向堆。是两个不同的堆栈对象,无论堆上的值是否相同,引用地址不同,结果为false;

 

文章已创建 112

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部