int 和 Integer的一些区分

int 和 Integer的一些区分

捡破烂的诗人 476 2022-07-13
  • 联系方式:1761430646@qq.com
  • 菜狗摸索,有误勿喷,烦请联系

1.int, new Integer(), Integer比较区别

1.1 基本区分

  • int是Java的一种基本类型,而Integer对象的引用,是int的包装类
  • int默认值为0,而Integer默认值为null
  • int是直接存储数据值,Integer则是生成一个指针指向此对象

1.2 两个new Integer()的比较–永远为false

  • ==号对象之间比较的是内存地址,基本数据类型比较的是数值大小

  • 由于不同对象指向不同的内存地址,所以一直为false

    8.1-1657704825529

1.3 两个(使用自动装箱生成的)Integer变量比较

  • 结论:

    • 如果两个变量值均在在-128 ~ 127之间,则比较结果为true,否则为false
  • 理由:

    • Integer i = 100的底层实际上是Integer i = Integer.valueOf(100),而在Integer类中有个缓存数组,其值范围为-128 ~127,当调用Integer.valueOf()方法时,如果参数值在这个范围内,则立马返回此缓存数组中对应的指引,否则new Integer()出来

    • 8.2-1657704825398

      8.3-1657704825498

1.4 Integer变量(自动装箱)和new Integer()变量比较

  • 结论:永远不相等
  • 理由
    • 从上述可知,Integer i = xxx实际上所引用的对象要不是重新new出来,要不是就是指向Java常量池中的,而正常的new Integer()是在堆中新建的对象,两者在内存中的地址不同

1.5 int变量和Integer、new Integer()比较

  • 结论:只要两个的数值是相等的,则为true,否则为false
  • 理由:
    • 当包装类Integer和基本数据类型int比较时,Java会自动拆箱为int,然后进行数值上的比较

# 杂 # 区分