一、区别

1、类型

  • int是java中原始八种基本数据类型之一;
  • Integer是一个类,包装整型提供了很多日常的操作;

2、存储位置和大小

  • 如果作为方法中的局部变量:
    • int是由jvm底层提供,由Java虚拟机规范,int型数据存储在局部变量区,占用一个数据单元(4个字节);
    • Integer型数据存储在Java运行时数据区的堆中,不在使用时可被垃圾回收机制回收;
      • Integer对象占用的存储空间大小:
        • Mark Word:4个字节,标记位;
        • Class对象指针:4字节,指向对应class对象的内存地址;
        • 对齐: 对齐填充字节,按照8个字节填充;
        • 4+4+8 = 16字节;
  • 如果作为类的成员变量,则不管是 int 类型还是 Integer 类型则都是存储在堆中;

3、使用时字节码的区别

  • int型字节码示例:
    • 定义:int num1 = 32;
    • 字节码: 0: bipush 32;
  • Integer型字节码示例:
    • 定义:Integer num2 = 64;
    • 字节码:
      • 3:bipush 64;
      • 5:invokestatic #20 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

二、联系

1、相互转化

  • Integer.valueOf, int -> Integer;
  • Integer.intValue() Integer -> int;
  • 也可以直接相互赋值;

2、自动拆装箱操作(auto boxing/unboxing)

  • int -> Integer ,装箱;
  • Integer -> int, 拆箱;
  • 注意: 程序中尽量避免无意中的拆装箱操作,尤其是有性能考虑时;

3、Integer中缓存机制的分析

public static Integer valueOf(int i) {
  if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
    return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
  return new Integer(i);
valueOf

相关文章:

  • 2021-08-03
  • 2022-12-23
  • 2021-08-08
猜你喜欢
  • 2021-08-23
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2021-12-19
  • 2021-09-07
  • 2022-12-23
相关资源
相似解决方案