• 8 int和Integer的区别


    数据类型

    int是基本数据类型,Integer是int的包装类,属于引用类型

    初始值

    int的初始值为0,Integer的初始值为null

    存储位置

    int是直接存储在栈中的,Integer是引用数据类型,存储在栈中的是它的内存地址,实际的对象存储在堆中

    比较

    int比较的是两个变量的值是否相等,Integer比较的是内存地址是否相同

    传递方式

    int在传递参数时都是按值传递,Integer按引用传递,传递的是对象的内存地址


     衍生一下:自动装箱/自动拆箱

    从Java5开始引入了自动装箱/自动拆箱机制,二者可以相互转换

    public class T {
        public static void main(String[] args) {
            //自动装箱
            Integer a = 10;
            //自动拆箱
            int b = a;
        }
    }

    自动装箱:就是自动将基本数据类型转换为引用类型

    自动拆箱:就是自动将引用类型转换为基本数据类型

    自动装箱实现原理

    当我们给一个Integer对象赋一个int值时,会调用Integer类的valueOf()方法,通过阅读源码,我们可以得到这样的结论:如果整数的值在-128~127之间,就不会new新的Integer对象,而是直接引用常量池中的Integer对象,如果不在这个范围内,则会new新的Integer对象。

    public static Integer valueOf(String s) throws NumberFormatException {
        return Integer.valueOf(parseInt(s, 10));
    }
    
    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);
    }    

    注意:除了double和float没有使用缓存,其它6种基本数据类型都使用了缓存策略

    自动拆箱实现原理

    当我们给一个int变量赋一个Integer对象时,其实调用的时Integer.intValue()方法,这个很简单,直接返回value值。

    public int intValue() {
      return value;
    }
  • 相关阅读:
    FastStone Capture(FSCapture) 注册码
    Qt下开发及调用带界面的DLL
    Gin生成证书开启HTTPS
    Gin+Vue3开启nginx gzip但是不生效。
    GIn+Docker+docer-compose
    Go字符串切片
    Vue使用AG Grid嵌套element-plus
    GIN转换UTC时间
    GORM对实现datetime和date类型时间
    (二)PaddleOCR 编译 ocr_system.dll
  • 原文地址:https://www.cnblogs.com/xilichenbokeyuan/p/14149954.html
Copyright © 2020-2023  润新知