包装类
前面八种基本数据类型(boolean、byte、char、short、int、long、float、double)都有相应的包装类。
包装类的存在解决了基本数据类型无法做到的事情泛型类型参数、序列化、类型转换、高频区间数据缓存。尤其是最后-项。
数据缓存
以Integer为例:我们都知道 Integer会缓存- 128 127 之间的值,对于 Integer var=?在- 128 127 之间的赋值, IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据都会在堆上产生,并不会复用已有对象,这是一个大问题。因此,推荐所有包装类对象之间值的比较 全部使用 quals ()方法。
最后详细介绍 Integer ,因为它是 Java据世界里应用最广的数据类型,缓存范围是 128 127 。但它是唯一可以修改缓存范围的包装类,在 VM options 加入参数-XX:AutoBoxCacheMax=7777,即可设置最大缓存值为 7777
// Long 类型只续存 128 127 之间的数值
Long e = 10001 ;
Lo f = 10001 ;
System.out.prntln("Long=lOOO is" 十( e == f)) ;
// JVM AutoBoxCacheMax 只对 Integer 对象有效
Integer x = 1001 ;
Integer y = 1001 ;
System.out .println ("Integer=lOOl is" + (x == y));
//运行结果:
Long=lOOO is false
Integer=lOOl is true
该例很好地说明了 Long 只是缓存了 -128~ 127 之间的值,而 1000L 没有被缓存;在将 Integer 最大缓存值改为 777 后, 1001 被成功缓存。合理掌握包装类的缓存策略,防止遇到问题是一个方面,使自己的程序性能最大化,更是程序员的情怀所在。
字符串