一、String对象及其特点
核心组成:字符数组 char[] 、offset偏移量 、count长度
特点:1. 不可变性 2.针对常量池的优化 3.类的final定义
二、subString引起的内存溢出
1.subString 在jdk7版本以下存在,解决方案x = new String(x.substring(x, y));这样的话,就会创建一个新数组,切断与原来的数组的引用,既然JDK6中存在这样一个鸡肋,SUN工程师们肯定会解决的,在JDK7中,该鸡肋已经得到解决。在JDK7中调用substring时,会自动创建一个字符数组,新字符串指向新字符数组,则原来数组可以被GC处理。
this.value = Arrays.copyOfRange(value, offset, offset + count);
三、字符分隔与查找
split---->StringTokenizer----->indexOf 性能递增
charAt 也是高效的
四、String和StringBuffer、StringBuilder
String对象是不可变对象,需要字符操作的地方都是新建对象,一来会增加新对象数,增大占用内存;二来会降低效率;
注意:1. + :new是新建String对象操作 2.String类的方法都是新建String对象操作
效率低下,为了提升效率使用StringBuilder和StringBuffer类。
小结:
(1)如果要操作少量的数据用 String;
(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer,因为方法都是synchronized同步方法
(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder(推荐使用),因为始终是一个对象,本质上是native 的数组arrayCopy操作
网友评论