> 文档中心 > 【Java面试题(Java核心知识点)】--002自动装箱和拆箱

【Java面试题(Java核心知识点)】--002自动装箱和拆箱

002自动装箱和拆箱

  • 装箱和拆箱的概念
  • valueOf
  • ==运算符和equals函数

装箱和拆箱的概念

  • 装箱:将基本类型包装器类型包装起来
  • 拆箱:将包装器类型转换为基本类型

valueOf

Integer a = 100;Integer b = 100;Integer c = 128;Integer d = 128;System.out.println(a == b); // trueSystem.out.println(c == d); // false

其实,Integer方法中的valueOf方法:

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

当不满足条件时,会重新创建一个对象返回,故结果必然不相等。

  • valueOf方法在创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用,否则创建一个新的Integer对象。
  • Double类型中的valueOf方法,每次返回都是重新new的对象。
  • IntegerShortByteCharacterLong这几个类的valueOf方法的实现类似。
  • DoubleFloatvalueOf方法的实现类似。
  • BooleanTrueFalse是两个静态成员属性
    Integer i = new Integer(xxx)会触发自动装箱,而Integer i = xxx不会。

==运算符和equals函数

  • ==运算符的两个操作数都是包装器,则比较是否指向同一对象,如果有一个操作数是表达式(包括算数运算)则比较的是数值(会触发自动拆箱)。
  • equals会先触发自动拆箱,再触发自动装箱过程。
  • int == Integer进行比较时,Integer会先拆箱再比较。
  • integer1 == integer2 进行比较时,由于都是通过new创建,故存放位置不同,因此为false
    上一篇:001隐式(自动)类型转换和显示(强制)类型转换

❤️这里是 三千步, 让我们一起学习进步~❤️