java中String和StringBuffer的区别
来源:才华咖 本文已影响1.06W人
来源:才华咖 本文已影响1.06W人
String这个类是Java中使用得最频繁的类之一,以下就是小编精心推荐java中String和StringBuffer的区别,希望对大家有帮助!
看到这个讲解的不错,所以转一下
在java中有3个类来负责字符的操作。
acter 是进行单个字符操作的,
ng 对一串字符进行操作,不可变类。
ngBuffer 也是对一串字符进行操作,是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对它进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append()方法.
nd("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的'值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = entTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = entTimeMillis();
long time = (lend1 - lstart1);
tln(time);
可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。
也就是46秒。
我们再看看以下代码
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = entTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
nd(tempstr);
}
long lend2 = entTimeMillis();
long time2 = (lend2 - lstart2);
tln(time2);
得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试
如果还是不能够明白:
1)String的联合+方法与StringBuff的append方法的区别:
String的+运算符在进行字符串运算时,首先将当前的字符串对象转换为StringBuff 类型,调用其append方法,最后再将生成的StringBuff 对象通过其toString 方法转换为String类型的字符串,所以其效率要低。
但是在可读性上,还是String的连接运算符要高。
2)StringBuff是线程安全的
String是线程是非安全的
3)String是不可以修改的字符串对象,而StringBuff是可以修改的。
public static boolean fileCopy(String srcStr, String destStr) {
File srcFile = null;
File destFile = null;
Reader reader = null;
Writer writer = null;
boolean flag = false;
try {
srcFile = new File(srcStr);
if (!ts()) {
tln(“源文件不存在”);
(0);
} else {
reader = new FileReader(srcFile);
}
destFile = new File(destStr);
writer = new FileWriter(destFile);
char[] buff = new char[1024];
int len;
String str = “”;
StringBuffer sbuff = new StringBuffer();
while ((len = (buff)) != -1) {
// str += new String(buff, 0, len);
nd(new String(buff,0,len));
}
// e(arArray());
e(ring()arArray());
flag = true;
h();
e();
e();
} catch (IOException e) {
tln(“文件拷贝异常:= ” + essage());
}
return flag;
}
Be grateful for friends圣诞节英语作文
英语作文Be grateful for friends
浅析javascript中function 的length属性
如何在Javascript中为String对象添加trim,ltrim,rtrim方法
be grateful for friends的英语作文
,javascript break和continue区别
Spring Festival is My Favorite Festival英语作文
Be grateful for friends为题目的作文
Abut M Teaching f English Writing为题目的作文
JavaScript如何实现JSON.stringify
Javascript中arguments对象的详解和使用方法
whats your plan for dragon boat festival英语作文
Be grateful for friends英语作文
A Visittothe Fragrant Mount初中英语作文
关于Unit 1 The Dragon Boat Festival教学案
英语满分作文:Reading-TheBestMeanstoAcquireknowledge
Margaret Sanger: The Morality of Birth Control quo
Urban Food Foraging Looks Fruitful美文欣赏
Java中String三种加法的区别
Spare No Efforts in Doing Things英语作文
Passage Eighteen (Strictly Ban smoking)英语阅读理解
初一英语Unit 12 My favorite subject is science 课后练习题答
中古和古着的区别
民国时期中统和军统的区别
牛津深圳版英语九下Unit1《Greatexplorations》Reading说课稿
Java中break、continue、return语句的使用区别对比介绍
最新《Fate/Stay Night Unlimited Blade Works》经典名句
六级英语写作范文:The Celebration of Western Festivals
TV Receivers in Students Flats大学英语作文
GetaThoroughUnderstandingofOneself英语六级作文
中考英语的满分作文:Going abroad for studies
优秀的英语作文:An Unforgettable Evening
Java中break、continue、return语句的使用区别对比
英语阅读:Covergirl unveils empowering brand update
简历和求职信的区别
Time To Stop Worrying About Invasive Species美文欣赏
英语阅读:African Union Leaders Talk Mali, Chinese Investmen
GRE写作Issue和Argument的区别及技巧
Brain training rules大脑训练法则英语阅读
高中英语作文:My approach to difficulties in learning