java中整型的缓存机制-java开发java经验技巧

java中整型的缓存机制-java开发java经验技巧

ID:30769251

大小:55.00 KB

页数:4页

时间:2019-01-03

java中整型的缓存机制-java开发java经验技巧_第1页
java中整型的缓存机制-java开发java经验技巧_第2页
java中整型的缓存机制-java开发java经验技巧_第3页
java中整型的缓存机制-java开发java经验技巧_第4页
资源描述:

《java中整型的缓存机制-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java中整型的缓存机制-编程开发技术Java中整型的缓存机制译文出处:张洪亮原文出处:JavaPapers本文将介绍Java中Integer的缓存相关知识。这是在Java5中引入的一个冇助于节省内存、提高性能的功能。首先看一个使用Integer的示例代码,从中学习其缓存行为。接着我们将为什么这么实现以及他到底是如何实现的。你能猜出下面的Java程序的输出结果吗。如果你的结果和真正结果不一样,那么你就要好好看看木文了。packagecom.javapapers,java;publicclassJavalntegerCache{publics

2、taticvoidmain(String...strings){Integerintegerl=3;Integerintcgcr2=3;if(integerl二二integer2)System,out.println("integerl==integer2zz);elseSystem,out.printin(,zintegcrl!=integcr2z/);Integerinteger3二300;Integerintegerd=300;if(integer3==integer4)System,out.printin(〃integer3==in

3、teger4/z);elseSystem,out.println(〃integer3!=integer4z/);我们普遍认为上面的两个判断的结果都是false。虽然比较的值是相等的,但是由于比较的是对象,而对象的引用不一样,所以会认为两个if判断都是false的。在Java中,二二比较的是对象应用,而equals比较的是值。所以,在这个例了中,不同的对象有不同的引用,所以在进行比较的时候都将返回false。奇怪的是,这里两个类似的if条件判断返回不同的布尔值。上面这段代码真止的输出结果:integerl==integer2integer3!

4、=integer4Java中Integer的缓存实现在Java5中,在Integer的操作上引入了一个新功能來节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。适用于整数值区间-128至+127。只适用于口动装箱。使用构造函数创建对象不适用。Java的编译器把基木数据类型自动转换成封装类对象的过程叫做自动装箱,相当于使用valueOf方法:Integera二10;//thisisautoboxingIntegerb=Integer.valueOf(10);//underthehood现在我们知道了这种机制在源码中哪里使用了

5、,那么接下來我们就看看JDK中的valueOf方法。下面是JDK1.&0build25的实现:/***Rcturnsan{@codcInteger}instanccrcprcscntingthespecified*{@codeint}value.Ifanew{@codeInteger}instanceisnot*required,thismethodshouldgenerallybeusedinpreferenceto*theconstructor{@linkttlnteger(int)},asthismethodislikely*toyi

6、eldsignificantlybetterspaceandtimeperformanceby*eachingfrequcntlyrequestedvalues.**Thismethodwillalwayscachevaluesintherange-128to127,*inelusive,andmaycacheothervaluesoutsideofthisrange.**@paramiem{@codeint}value.*@returnan{@codeInteger}instancerepresenting{@codei}.*©since

7、1.5*/publicstaticTntegervalueOf(inti){if(i>二IntcgcrCachc.low&&i<=IntcgcrCachc.high)returnIntegerCache.cache[i+(-IntegerCache.low)];returnnewInteger(i);}在创建对象之询先从IntegerCache.cache中寻找。如果没找到才使用new新建对象。IntegerCacheClassIntegerCache是Integer类中定义的一个privatestatic的内部类。接下來看看他的定义。/*

8、**Cachetosupporttheobjectidcntitysomanticsofautoboxingforvaluesbetween*-128and127(inclusi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。