竹笋

首页 » 问答 » 常识 » StringStringBuiler
TUhjnbcbe - 2023/3/27 20:17:00
中科治白癜风疗效更显著 https://mjbk.familydoctor.com.cn/bjbdfyy_js/

一、前言

刚开始学习Java时,作为只会C语言的小白,就为其中的字符串操作而感到震撼。相比之下,C语言在字节数组中保存一个结尾的\0去表示字符串,想实现字符串拼接,还需要调用strcpy库函数或者自己手动去复制数组,非常麻烦,更别提其他复杂操作,而Java通过String类让字符串操作变得十分简单和方便。

除此之外,还有stringbuilder等这些类的辅助,那么本文就从String,StringBuiler和StringBuffer的区别开始,去探讨Java中的字符串操作。

二、String,StringBuiler和StringBuffer

2.1String类

Java提供了String类来创建和操作字符串。在源码中可以看到,String类内部的实现也是一个字节数组,这个数组是final类型的,因此String是不可变的对象,每次在对String类进行改变的时候都会生成一个新的string对象,然后将指针指向新的string对象。

2.2StringBuiler类

和String类不同的是,StringBuilder类的对象能够被多次的修改,并且不产生新的对象。这个特性的意义在于,如果我们进行大量的字符串操作,使用String类就会产生很大的性能消耗,而StringBuilder就可以避免这个问题。

2.3StringBuffer类

StringBuffer和StringBuiler之间的最大不同在于StringBuilder的方法不是线程安全的。

由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。

2.4String,StringBuiler和StringBuffer的比较(对比C/C++)

三、各种字符串操作的效率测试

3.1测试代码

Testpublicvoidtest(){intcount=;longstartTime=System.curntTimeMillis();Stringstr="";for(inti=0;icount;i++){str+=i;}System.out.println("执行"+count+"次String耗时:"+getRunTime(startTime));startTime=System.curntTimeMillis();StringBuilderstringBuilder=newStringBuilder("");for(inti=0;icount;i++){stringBuilder.append(i);}System.out.println("执行"+count+"次StringBuilder耗时:"+getRunTime(startTime));startTime=System.curntTimeMillis();StringBufferstringBuffer=newStringBuffer("");for(inti=0;icount;i++){stringBuffer.append(i);}System.out.println("执行"+count+"次StringBuffer耗时:"+getRunTime(startTime));}

3.2测试结果

执行次String耗时:32s执行次StringBuilder耗时:2ms执行次StringBuffer耗时:4ms

3.3小结

可以看到String类的性能远低于StringBuiler和StringBuffer,而StringBuiler在本次测试中比Stringbuffer提高了50%的性能

四、Java字符串和正则表达式

4.1测试代码

Testpublicvoidtest0(){//邮*编码StringpostCode="[1-9]\\d{5}";//区号-座机号码StringaaCode="\\d{3}-\\d{8}

\\d{4}-\\d{7}";//手机号码Stringphone="(?:13\\d

15\\d

18\\d)\\d{5}(\\d{3}

\\*{3})";Stringtext="邮*编码:"+"区号-座机号码:-"+"手机号:"+"邮*编码:"+"区号-座机号码:-"+"手机号:";Patternp=Pattern.

1
查看完整版本: StringStringBuiler