JDK自带的缓存--包装类的缓存
关于包装类和基本类型的文章我前面已经整理过了,这里大致罗列下重点。我们主要是想研究下包装类的缓存。
- 1,自动装箱和自动拆箱
java1.5之后就提供了自动装箱和自动拆箱的功能,当然我们也可以手动来装箱和拆箱。
基本类型-->包装类对象:new WrapperClass(primitive),Integer a = new Integer(1);
包装类对象-->基本类型:WrapperIntance.xxxValue(),int intValue = a.intValue();
- 2,包装类和字符串的转换
字符串-->包装类:
包装类提供的parseXxx(String)静态方法,Integer aa = Integer.parseInt("1");
包装类提供的Xxx(String)构造器,Integer cc = new Integer("1");注意,不推荐使用这个,因为不能用缓存了呢
包装类-->字符串:
包装类后面加一个加号,String aaa = new Integer(1) + "";
String类提供的valueOf()方法,String bbb = String.valueOf(a);注意,别用这种,加号运算符编码简单而且高效
- 3,包装类的缓存
ok,现在进入我们的真正主题,缓存。我们先来看一段代码:
public static void main(String[] args)
{
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b);//false Integer c = 1;
Integer d = 1;
System.out.println(c == d);//true
}
从上面的代码我们看出,如果我们自己人工来装箱和拆箱的话,系统不会给我们缓存的,输出是false,但是如果我们使用JDK的自动装箱和自动拆箱的话,系统就会给我们缓存起来,输出true。所以以后编码不管是为了编码简洁,还是为了性能,我们直接使用自动装箱和自动拆箱就OK了。
现在我们来研究下包装类的缓存:
打开JDK里面Integer的源码,我们看到该类里面有一个内部类IntegerCache,这个内部类里面定义了一个数组,这个数组就是来放我们的缓存数据的。
static
{
//执行初始化,创建-128到127的Integer实例,并放入cache数组中
for (int k = 0; k < cache.length; k++)
{
cache[k] = new Integer(j++);
}
}
总结:以后我们在使用包装类的时候,不管是处理基本类型还是装换包装类型,或者是操作字符串的相关转换,都使用jdk的自动拆箱和自动装箱功能,不要人工的new Integer实例,这样子就可以使用缓存了。
- 最后补充一点包装类的注意点:
应该认真的体会下设计出包装类的良苦用心。JDK设计包装类出来只是更好的支持基本类型的面向对象编程,并不说说从根本上来取代基本类型。系统提供的自动装箱和拆箱功能也不能用来作为消除基本类型的后门。在使用包装类代码和等价使用基本类型的代码从性能上面对比差了好多,因为每次自动装箱和自动拆箱都会增加性能开销的,所以我们不要滥用,一般来说除了在定义对象属性类型用包装类之外,最好都使用基本类型。
JDK自带的缓存--包装类的缓存的更多相关文章
- JAVA包装类的缓存范围
JAVA包装类的缓存范围 前两天面试遇到两个关于JAVA源码的问题,记录下来提醒自己. 1.写出下面的输出结果 System.out.println(Integer.valueOf("100 ...
- java包装类的缓存机制(转)
出处: java包装类的缓存机制 java 包装类的缓存机制,是在Java 5中引入的一个有助于节省内存.提高性能的功能,只有在自动装箱时有效 Integer包装类 举个栗子: Integer a = ...
- 一篇文章带你整明白HTTP缓存知识
最近看了很多关于缓存的文章, 每次看完,看似明白但是实际还是没明白,这次总算搞明白协商缓存是怎么回事了 首先,服务器缓存分强制缓存和协商缓存(也叫对比缓存) 强制缓存一般是服务端在请求头携带字段Exp ...
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...
- 带你了解MyBatis一二级缓存
在对数据库进行噼里啪啦的查询时,可能存在多次使用相同的SQL语句去查询数据库,并且结果可能还一样,这时,如果不采取一些措施,每次都从数据库查询,会造成一定资源的浪费,所以Mybatis中提供了一级缓存 ...
- JDK 自带的服务发现框架 ServiceLoader 好用吗?
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 Github · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- JDK自带的LinkedHashMap来实现LRU算法
1 代码如下 public class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> { private final i ...
- jdk自带监控程序jvisualvm的使用
监控小程序的配置 生产环境tomcat的配置 编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下: 配置如下内容: export JAVA_OPTS="- ...
- JDK自带线程池学习
JDK自带线程池 线程池的状态 线程有如下状态 RUNNING状态:Accept new tasks and process queued tasks SHUTDOWN状态:Don't accept ...
随机推荐
- Linux Select之坑
最近在写一个demo程序,调用select()来监听socket状态,流程如下: r_set 初始化 timeout 初始化3秒超时 loop{ select(ntfs, &r_set, nu ...
- 【转】NO.1、 appium之ios环境搭建
首先感谢iOS开发同学无私的帮助. 一.环境及版本: xcode:7.1,我是百度下的dmg文件,直接装的,这个太大了,请自行百度,或升级自己的xcode,一般都不需要这一步. appium:1. ...
- js调取本地可执行文件exe
通过ie支持的activex控件来读取文程序的安装路径,从而调用本地exe文件 function callExe () { try{ var command; var shell = new Acti ...
- replace into 浅析之一
一 介绍 在笔者支持业务过程中,经常遇到开发咨询replace into 的使用场景以及注意事项,这里做个总结.从功能原理,性能和注意事项上做个说明.二 原理2.1 当表中存在主键但是不存在唯一建的 ...
- js和jquery通过this获取html标签中的属性值
<html> <head> <script type="text/javascript" src="jquery-1.10.2.min.js ...
- python写一个网页翻译器
import urllib.requesturl='https://fanyi.baidu.com/v2transapi'data={}data['i']=opdata['from']='AUTO'd ...
- CTFCrackTools在Windows下显示A Java Exception has occurred的解决方案
打CTF做密码学的人一定少不了用这个工具,CTFCrackTools,这个几乎可以号称密码学的神器,但是呢,最近博主遇到了一些麻烦事,每次打开的时候都是显示A Java Exception has o ...
- 2-Sat+输出可行解(个人模版)
2-Sat+输出可行解: //LightOJ 1251 #include<stdio.h> #include<string.h> #include<vector> ...
- [bzoj2836] 魔法树
俩操作:增加路径上的点的权值.查询子树的权值和. 想了想似乎只能树链剖分了..好久没写链剖+数据结构了TAT 一开始没开LL炸了一发(明明有想到的..我果然是傻逼= = #include<cst ...
- c语言基础学习09_复合类型
=============================================================================涉及到的知识点有:一.结构体1.定义结构体st ...