Java包装类的缓存机制原理实例详解
Java包装类的缓存机制原理实例详解
这篇文章主要介绍了Java包装类的缓存机制原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 包装类的缓存机制,是在Java 5中引入的一个有助于节省内存、提高性能的功能Java包装类的缓存机制原理实例详解,只有在自动装箱时有效
包装类
举个栗子:
Integer a = 127; Integer b = 127; System.out.println(a == b);
这段代码输出的结果为true
使用自动装箱将基本类型转为封装类对象这个过程其实底层实现是调用封装类的方法:
a =127; 相当于 a = .(127);
看一下的方法:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
如果入参 i 大于等于.low或者小于等于.high),就从中获取对象
看一下:
private static class IntegerCache {
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 = 127;
}

private IntegerCache() {}
}
默认范围为:-128到127之间,范围的最大值可以通过java.lang…high设置,通过for循环将范围内的数据实例化为对象放到cache数组里
在测试一下:
Integer a = 128; Integer b = 128; System.out.println(a == b);
输出结果为falsejava缓存技术实例,所以如果没有指定cache最大值时,在-128到127之间使用自动装箱时,会使用缓存
Byte包装类
再举个栗子:
public static void main(String[] args) {
Byte a = 127;
Byte b = 127;
System.out.println(a == b); //true
}
由于Byte范围在-128到127之间,所以Byte的都是从缓存中获取的
public static Byte valueOf(byte b) {
final int offset = 128;
return ByteCache.cache[(int)b + offset];
}
类:
private static class ByteCache {
private ByteCache(){}
static final Byte cache[] = new Byte[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Byte((byte)(i - 128));
}
}
与相比,的最大值是不能修改的就是127
Short包装类
public static Short valueOf(short s) {
final int offset = 128;
int sAsInt = s;
if (sAsInt >= -128 && sAsInt <= 127) { // must cache
return ShortCache.cache[sAsInt + offset];
}
return new Short(s);
}
类:
private static class ShortCache {
private ShortCache(){}
static final Short cache[] = new Short[-(-128) + 127 + 1];
static {

for(int i = 0; i < cache.length; i++)
cache[i] = new Short((short)(i - 128));
}
}
的最大值也不可以修改,范围只能在-128 ~ 127之间
Long包装类的方法和类与Short包装类的实现一致java缓存技术实例,范围也是只能在-128 ~ 127之间
包装类
方法:
public static Character valueOf(char c) {
if (c <= 127) { // must cache
return CharacterCache.cache[(int)c];
}
return new Character(c);
}
类:
private static class CharacterCache {
private CharacterCache(){}
static final Character cache[] = new Character[127 + 1];
static {
for (int i = 0; i < cache.length; i++)
cache[i] = new Character((char)i);
}
}
的缓存范围在0 ~ 127之间
包装类
方法:
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
TRUE跟FALSE都是 final修饰的静态变量
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false);
Float包装类 & 包装类
方法:
public static Float valueOf(float f) {
return new Float(f);
}
public static Double valueOf(double d) {
return new Double(d);
}
Float和没有使用缓存,直接new的对象
总结:
java的包装类中:Byte,Shortjava缓存技术实例,,LongJava包装类的缓存机制原理实例详解,使用代码块进行初始化缓存,其中的最大值可以通过java.lang…high设置;使用 final实例化的对象;Float和直接new的对象没有使用缓存
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » Java包装类的缓存机制原理实例详解
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

