java关于Integer设置-128到127的静态缓存
2024-08-27 08:54:29
今天在一个java群里,看到有个群友问到如下为什么第一个为true,第二个为false。
System.out.println(Integer.valueOf("50")==Integer.valueOf("50")); //true
System.out.println(Integer.valueOf("200")==Integer.valueOf("200")); //false
由于一开始他问的第二句,我还想当然的以为是new的对象,肯定不一样,但是为什么第一句为true呢,后来通过查找资料发现
1、https://www.zhihu.com/question/29879295/answer/102396251
2、http://blog.csdn.net/chengzhezhijian/article/details/9628251
/**
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
private static class IntegerCache {
static final int high;
static final Integer cache[]; static {
final int low = -128; // high value may be configured by property
int h = 127;
if (integerCacheHighPropValue != null) {
// Use Long.decode here to avoid invoking methods that
// require Integer's autoboxing cache to be initialized
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h; cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
} private IntegerCache() {}
}
valueOf会将常用的值(-128 to 127)cache起来。当i值在这个范围时,会比用构造方法Integer(int)效率和空间上更好。
最新文章
- 艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)
- SQLServer日期格式化
- IOS - Create Push Segue Animation Without UINavigationController
- 内存缓存机制and垃圾回收机制
- DOS批处理不支持将UNC 路径作为当前目录的巧妙解决方案
- 详解JavaScript函数模式
- linux 病毒 sfewfesfs
- ruby 学习 -- string --1
- Html Meta 标签详解
- pyenv简介——Debian/Ubuntu中管理多版本Python
- Java之利用Socket获取网站内容
- 使用device.js检测设备并实现不同设备展示不同网页
- POJ 3176-Cow Bowling(DP||记忆化搜索)
- python通过http请求发送soap报文进行webservice接口调用
- [HCNA]VLAN配置Trunk接口
- Access Treeview树节点代码二
- 将字符串存储到注册表中,长度一定是 strlen(text) + 1
- BZOJ 3620: 似乎在梦中见过的样子
- CentOS安装Subversion 1.9.*版本客户端
- Calendar获取当前年份、月份、日期