zoukankan      html  css  js  c++  java
  • int和Integer的区别

    int和Integer的区别

    int和Integer的基本区别

    1. int是基本数据类型,Integer是int包装类。
    2. Integer变量必须实例化后才能使用,int可以直接使用
    3. Integer的默认值是null,int默认值是0
    4. Integer变量实际上是对象的引用,指向new的Integer对象,int是直接存储数据

    Integer的自动装箱

    一般我们生成对象都是Object o = new Objectz(),但是对于Integer,我们可以Integer a = 10;
    因为Integer的自动装箱功能。
    通过反编译工具我们可以看到class文件下是
    Integer a = Integer.valueOf(10);
    这就是基本数据类型的装箱。

    Integer的自动拆箱

    int b = a;反编译生成的class文件是int b = a.intVlaue();

    深入对比

            Integer a = new Integer(10);
            Integer b = new Integer(10);
            System.out.println(a == b);
            System.out.println(a.equals(b));
    

    结果前false,后true。
    因为Integer变量是对Integer对象的引用,new了两个对象,显然内存地址不一样,引用不一样。
    而Integer重写了equals方法,数值一样就返回true。

        public static void main(String[] args) {
            Integer a = 10;
            Integer b = 10;
            System.out.println(a == b);
            Integer c = 128;
            Integer d = 128;
            System.out.println(c == d);
        }
    

    结果前true,后false
    因为Integer自动装箱时对数值在-128到127的对象放入缓存中,第二次就直接取缓存中的数据而不会new。

        public static void main(String[] args) {
            Integer a = new Integer(10);
            int b = 10;
            System.out.println(a == b);
        }
    

    结果为true
    因为Integer类型和int比较时,会自动拆箱,化为基本类型数据比较。

    触发自动拆箱

    算术运算会触发自动拆箱

  • 相关阅读:
    2 3 5 7的倍数
    三角形面积
    数塔取数问题
    拼成最小的数
    JMeter使用总结
    jmeter+ant生成报告(ubuntu环境)
    LINUX常用命令,不定时更新
    oracle语句使用总结
    "the import org.junit can not be resolved"解决办法
    [SWPUCTF 2018]SimplePHP
  • 原文地址:https://www.cnblogs.com/dearcabbage/p/10603460.html
Copyright © 2011-2022 走看看