欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Integer与int的区别

程序员文章站 2024-03-07 13:04:51
...

int:八种原始数据类型(byte、int、short、long、float、double、char、boolean)之一。默认值是0,可以直接存储数据值。

Integer:是int的包装类,它有一个int类型的字段存储数据,并且提供了基本的操作。比如数学运算、int和字符串之间转换等。在Java5中引入了自动装箱和自动拆箱的功能,Java可以根据上下文,自动进行转换,极大地简化了相关编程。默认值是null,必须实例化才可以使用。

上面这些是一些基本上的概念,那么我们对比下面的一些值,请给出相应的答案

 public static void main(String[] args) {
        int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        System.out.println(i == i2);//(1)
        System.out.println(i == i3);//(2)
        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6)//(3)
        /*Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6)//(4)
*/        Integer ii5 = new Integer(127);
        System.out.println(i5 == ii5); //(5)
        Integer i7 = new Integer(128);
        Integer i8 = new Integer(123);
        System.out.println(i7 == i8);  //(6)
    }

(1)(2) true 。因为Integer和int进行比较,Integer会进行自动拆箱的操作。Integer通过intValue()方法来获得int的属性,从而跟int进行比较。

(3)true.。 因为Integer在-128——127进行值缓存操作,i5->Integer.valueOf(127)。valueOf代码如下。

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)//这里low是-128,high是127,这个是可以设置的
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
}

(4) false 128不在值缓存范围内,所以需要实例化。

(5) false 两个对象的指向不一样。

(6) false 指向的对象不一样。

小结

①Integer与new Integer不会相等。因为指向的内存地址不一样。

②两个都是非new出来的Integer,如果数在-128——127之间,则是true,否则是false。

java在编译Integer i2 = 128时候,被翻译成-> Integer i2 = Integer.valueOf(128);

而valueOf()函数会在-127——128之间进行缓存。

③两个都是new出来的,都为false

④int和Integer进行比较,都为true,因为Integer会被自动拆箱为int再去比较

相关标签: Integer