Java包装类缓存
1.基本概念
在jdk1.5及之后的版本中,Java在5大包装类中(Byte,Charactor,Short,Integer,Long)增加了相应的私有静态成员内部类为相应包装类对象提供缓存机制,Integer包装类的内部缓存类源码如下:
正如源码中所指,在自动装箱的基础上,缓存机制才会发生作用,当包装类加载时,内部类会初始化一个长度为((high-low)+1)的包装类类型数组,low有固定值为-128,而high的默认值为127,还可以通过系统配置文件进行修改,自定义high的取值范围是127-----(Interger.MAX_VALUE+127),Integer.MAX_VALUE是int类型变量的最大正数取值,其缓存机制是:当通过自动装箱机制创建包装类对象时,首先会判断数值是否在-128----127的范围内,如果满足条件,则会从缓存中寻找指定数值,若找到缓存,则不会新建对象,只是指向指定数值对应的包装类对象,否则,新建对象。
2.经典笔试题
- /**
- * Created by andrew on 2017/2/24.
- */
- public class Test {
- public static void main(String[] args) {
- Integer a = new Integer(100);
- Integer b = new Integer(100);
- // 输出为false,非自动装箱机制实现,属于两个不同的对象,所以返回false.
- System.out.println(a == b);
- Integer a1 = 100;
- Integer b1 = 100;
- // 输出为true," == "在此处比较的是两边对象的地址值,
- // 在定义b1对象的时候,因为100在-128---127的范围内,而且寻找到了缓存对象a1,
- // 所以引用b1直接指向a1对象,不会新建对象,两个引用指向是同一个对象,所以返回true.
- System.out.println(a1 == b1);
- Integer a2 = 1000;
- Integer b2 = 1000;
- // 输出为false," == "在此处比较的是两边对象的地址值,
- // 在定义b2对象的时候,因为1000不在-128---127的范围内,不会实现缓存机制,因此会新建包装类对象,
- // 属于两个不同的对象,所以返回false.
- System.out.println(a2 == b2);
- }
- }
Java包装类缓存的更多相关文章
- JAVA包装类的缓存范围
JAVA包装类的缓存范围 前两天面试遇到两个关于JAVA源码的问题,记录下来提醒自己. 1.写出下面的输出结果 System.out.println(Integer.valueOf("100 ...
- java包装类的缓存机制(转)
出处: java包装类的缓存机制 java 包装类的缓存机制,是在Java 5中引入的一个有助于节省内存.提高性能的功能,只有在自动装箱时有效 Integer包装类 举个栗子: Integer a = ...
- java包装类的自动装箱及缓存
首先看下面一段代码 public static void main(String[] args) { Integer a=1; Integer b=2; Integer c=3; Integer d= ...
- Java 包装类笔记
@(JDK)[包装类] Java 包装类笔记 当需要使用到集合的时候,如果是基础数据类型,需要转换为包装类,再使用,在JDK1.5之前,每次使用的时候,都需要手动转换为包装类(称为装箱),然后在使用的 ...
- Java包装类及其拆箱装箱
Java包装类,Wrapper~由于在java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型).基本类型的数据不是对象,所以对于要将数据类型作为对象来使用的情况,java提 ...
- Java包装类的常量池
Integer a=Integer.valueOf(100); Integer b=Integer.valueOf(100); System.out.println(a==b); Double d1 ...
- cache4j轻量级java内存缓存框架,实现FIFO、LRU、TwoQueues缓存模型
简介 cache4j是一款轻量级java内存缓存框架,实现FIFO.LRU.TwoQueues缓存模型,使用非常方便. cache4j为java开发者提供一种更加轻便的内存缓存方案,杀鸡焉用EhCac ...
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
- java 开源缓存框架--转载
原文地址:http://www.open-open.com/13.htm JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的 ...
随机推荐
- UVa 908 - Re-connecting Computer Sites
题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...
- 谈谈NIO和IO
Channel,Buffer 和 Selector 构成了核心的API. 其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类. Channel和Buffer 基本上,所有的 ...
- iOS 开发 之 测试框架kiwi
1. 在Podfile中加入 target :VVStackTests, :exclusive => true do pod 'Kiwi/XCTest' end 2.下载kiwi模板 XCode ...
- 9 Python+Selenium鼠标事件
[环境信息] python3.6+Selenium3.0.2+Firefox50.0+win7 [ActionChains类鼠标事件的常用方法] 1.右击:context_click() 2.双击:d ...
- 把C#对象变成数组技术---索引器(indexer)
public class IndexerDemo { IList list = new List(); public IndexerDemo() { list.Add("); list.Ad ...
- MySQL动态添删改列字段
动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...
- awakeFromNib与initWithCoder
- Eclipse 发布网站到linux的tomcat
1. 安装Eclipse tomcat插件 2. 打包程序 需要把程序打成war包,右键工程,如下操作: 3. 上传到linux 3.1 上传到tomcat目录下 tomcat/webapps/XXX ...
- 编译安装mysql-server5.6.32手记
起因: CentOS内置源里面默认安装的Mysql-server太老旧,不支持一些新方法的调用,需要重新安装一个新版本 老版本里面有数据,不想卸载,想保留库和软件本身 机器上没有运行Docker,而且 ...
- 使用Intent创建Tab页面
前面已经介绍了如何使用TabActivity来创建Activity布局,前面添加Tab页面使用了TabHost.TabSpec如下方法. setContent(int viewId):直接将指定Vie ...