欢迎来到天天文库
浏览记录
ID:30769251
大小:55.00 KB
页数:4页
时间:2019-01-03
《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
此文档下载收益归作者所有