一、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操作
一、字符串优化处理
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
- 这段时间在读《java程序性能优化》,看到里面有一些关于Java的一些数据结构相关的内容,主要涉及到String字...