详解Java 虚拟机(第④篇)——8 种基本类型的包装类和常量池
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Java 基本类型的包装类的大部分都实现了常量池技术, 即Byte,Short,Integer,Long,Character,Boolean; 这 5 种包装类默认创建了数值 [-128,127] 的
千家信息网最后更新 2026年11月01日详解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安全错误
数据库的锁怎样保障安全
互联网科技有限公司
没上市的科技互联网公司
互联网科技股票
华中科技大学互联网
南京欣网互联网科技
苏州互联网科技贷款公司
互联网科技公司有哪些
人人互联网科技是培训
互联网科技创新企业排名
山东吉时兔互联网科技有限公司
农村开互联网科技讲堂
阿里互联网科技公司
中国航天科技大学国际工业互联网
洛阳共同富裕互联网科技有限公司
徐州市互联网科技有限公司
雨阳互联网卡科技有限公司
互联网相关科技技术
西安左小互联网科技有限公司
广州三三互联网科技有限公司
互联网科技和医药行业
互联网科技图片
中国 科技 互联网
小米互联网科技园设置
消费医药和互联网科技
互联网金融科技元年
产业互联网科技服务公司
互联网科技包装股
江苏互联网智能科技产品出厂价
三亚科技创新互联网基地
承德科技产业互联网平台