今天是我第一次尝试Java语言。当我尝试这段代码时,我感觉很奇怪:
int a =500;
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(a));
所有这些结果都是不同的。但是当我把500改为50时,结果是一样的。
为什么?
但是当我把500改为50时,结果是一样的。
自动装箱会缓存基元到对象的转换。小值得到相同的对象,较大值则不然。
注意:虽然始终缓存 -128 到 127 之间的值,但可以缓存更高的值,具体取决于命令行设置。请参阅来源Integer
更多细节。
这也称为享元模式
您可以使用以下命令设置整数缓存的最大大小
-Djava.lang.Integer.IntegerCache.high=NNNN
-XX:AutoBoxCacheMax=NNNN
-XX:+AggressiveOpts // sets it higher depending on the version e.g. 10000
http://martykopka.blogspot.co.uk/2010/07/all-about-java-integer-cache.html
http://www.javaspecialists.eu/archive/Issue191.html
我感觉很奇怪
我知道你读这个问题的意思。 ;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)