详解Java 虚拟机(第④篇)——8 种基本类型的包装类和常量池
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Java 基本类型的包装类的大部分都实现了常量池技术, 即Byte,Short,Integer,Long,Character,Boolean; 这 5 种包装类默认创建了数值 [-128,127] 的
千家信息网最后更新 2025年12月02日详解Java 虚拟机(第④篇)——8 种基本类型的包装类和常量池
- Java 基本类型的包装类的大部分都实现了常量池技术, 即Byte,Short,Integer,Long,Character,Boolean; 这 5 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据, 但是超出此范围仍然会去创建新的对象。
- 两种浮点数类型的包装类 Float , Double 并没有实现常量池技术。
valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。
Integer 的部分源码:
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);}在 Java 8 中,Integer 缓存池的大小默认为 -128~127。
static final int low = -128;static final int high;static final Integer cache[];static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127;}示例1:
Integer i1=40;//Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40);从而使用常量池中的对象。Integer i2 = new Integer(40);//创建新的对象。System.out.println(i1==i2);//输出false示例2:Integer有自动拆装箱功能
Integer i1 = 40;Integer i2 = 40;Integer i3 = 0;Integer i4 = new Integer(40);Integer i5 = new Integer(40);Integer i6 = new Integer(0);System.out.println("i1=i2 " + (i1 == i2)); //输出 i1=i2 trueSystem.out.println("i1=i2+i3 " + (i1 == i2 + i3)); //输出 i1=i2+i3 true//i2+i3得到40,比较的是数值System.out.println("i1=i4 " + (i1 == i4)); //输出 i1=i4 falseSystem.out.println("i4=i5 " + (i4 == i5)); //输出 i4=i5 false//i5+i6得到40,比较的是数值System.out.println("i4=i5+i6 " + (i4 == i5 + i6)); //输出 i4=i5+i6 trueSystem.out.println("40=i5+i6 " + (40 == i5 + i6)); //输出 40=i5+i6 true
输出
缓存
常量
类型
包装
对象
数值
技术
示例
代码
内容
功能
大小
大部分
就是
拆装
数据
方法
时候
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
cad软件开发各阶段的任务
郑州思科网络技术培训
天津惠普服务器维修哪家便宜
数据库主从一致性
平安的软件开发
网络技术维护员面试题
苏州威斯登软件开发有限公司
通达信高级行情服务器地址更新
网络安全法发布不实消息
易云互联网科技有限公司
查找mysql数据库路径
es一般存什么数据库
潮讯网络安全怎么样登录
湖南省app软件开发培训中心
惠普580服务器存储类型
希宏世网络技术有限公司
建立数据库之前要
华为服务器报错图案
奥运网络安全服务与杀毒软件
软件开发书推荐
全境封锁哪个网络服务器很稳定
星际战甲 数据库
各类网络技术名称
计算机软件开发规范
网络安全微网文150字
断供对软件开发的影响
计算机网络技术超星网课答案
浪潮服务器上市公司
主播平台软件开发
icp许可证 服务器