美文网首页
Java Integer和int的区别

Java Integer和int的区别

作者: Franck_ | 来源:发表于2018-05-22 21:01 被阅读25次

    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));
    
    
        }
    
    

    需要增加的理解: 自动装箱和拆箱

    相关文章

      网友评论

          本文标题:Java Integer和int的区别

          本文链接:https://www.haomeiwen.com/subject/gdbkjftx.html