当前位置: 首页> 教育> 就业 > 【面试】基本数据类型的包装类缓存

【面试】基本数据类型的包装类缓存

时间:2025/8/26 15:31:29来源:https://blog.csdn.net/qq_32088869/article/details/139904147 浏览次数:0次

目录

          • 1. 说明
          • 2. Integer类分析
            • 2.1 代码块
            • 2.2 字节码
            • 2.3 分析
            • 2.4 valueOf方法

1. 说明
  • 1.在java中,基本数据类型的包装类(Integer、Byte、Character、Short、Long、Boolean)的某些值会被缓存。
  • 2.以提高性能并减少内存使用。
  • 3.这种缓存机制是自动的,并且对于开发者来说是透明的。
  • 4.对于Byte、Short、Integer、Long这些整数类型的包装类为-128到127之间的值提供了缓存。
  • 5.Character:字符类型的包装类Character为0到127之间的值提供了缓存
  • 6.对于Float和Double:这两个浮点类型的包装类并没有为任何值提供缓存。因为浮点数的精度问题使得缓存所有可能的值变得不实际。
  • 7.Boolean: Boolean类型的包装类为true和false两个值提供了缓存。因为Boolean只有两个可能的值,它的缓存机制非常直接和简单。使用Boolean.TRUE和Boolean.FALSE时,得到的是缓存中的对象实例。
  • 8.在进行对象比较时,通常推荐使用equals()方法而不是==操作符,因为equals方法提供了更健壮和一致的语义。当处理不同源(一个通过valueOf方法获得,一个通过new关键字创建)的对象,equals方法比==操作符更可靠。
2. Integer类分析
2.1 代码块
public void test(){Integer a = 10;Integer b = 10;
}
2.2 字节码
 0 bipush 102 invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>5 astore_16 bipush 108 invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
11 astore_2
12 return
2.3 分析
  • 1.bipush 10 bipush用于将一个字节(-128到127)的值推送到操作数栈上。即把10推送到操作数栈。
  • 2.invokestatic #5 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;> invokestatic 调用一个静态方法。#5 指向常量池中某个条目的索引,这里指向java/lang/Integer.valueOf方法的符号引用。(I)Ljava/lang/Integer 方法的描述符,该方法接受一个int类型的参数(由(I)表示)并返回一个java.lang.Integer类型的对象(由 (I)Ljava/lang/Integer;> 表示)。执行此指令时,JVM会从操作数栈顶部弹出一个int值(在这个例子中是10),将其作为参数调用java.lang.Integer.valueOf方法,并将返回的Integer对象推送到操作数栈的顶部。
  • 3.astore_1 将操作数栈顶部的值(在这个例子中是Integer对象)存储到局部变量数组的第二个位置(索引为1,因为局部变量数组的索引从0开始)。
2.4 valueOf方法
  • 1.代码块
@HotSpotIntrinsicCandidate
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}
  • 2.当i大于等于-128且小于等于127,则返回缓存中的对象,否则创建一个新对象。
关键字:【面试】基本数据类型的包装类缓存

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: