问题:StringBuffer和String 在效率上到底有多大的区别? 要测试才知道,如果串要频繁修改那肯定是buffer好;如果修改不多,那用哪个都无所谓吧(对STRING的任何修改,JVM都新创建一个STRING) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String既属于引用类型也属于基础数据类型,而且内容是静态的,在通常情况效率高些但如果涉及到连接字符串的时候,对于String每次连接都要重新分配内存,因此StringBuffer好些总之,对于静态处理,如:储存字符串,用String动态改变字符串内容则使用StringBuffer 超过4个以上的String连加用加法和StringBuffer都可以,因为编译器自动做了转化。如果仅仅是两个字符串相加,则最好用concat或StringBuffer。循环内部绝对不要使用String相加。 有没有More Effective Java这本书的啊? StringBuffer new一次是占用1024个字节但是StringBuffer.append()在总量不超过1024的情况下不会申请新的空间。String new一次倒是你指定的大小,但是String + 每次都会生成新的实例。所以,频繁操作的字符串用StringBuffer,否则,String,当然,多少次操作算频繁,就是一个经验和自己掌握的问题了。 用StringString s="";for(int i=0;i<1024;i++){ s+=i+"";}每一次循环都要new一次,而用StringBuffer除非容量不够,不许要用new,而new的运行时间花费是非常大的 ps.String 是immutable类型的!!! 转:出于方便的考虑,我们在进行字符串的内容处理的时候往往会出现以下的代码:String result="";result+="ok";通过使用javap工具我们可以知道其实上面的代码在编译成字节码的时候等同的源代码是:String result="";StringBuffer temp=new StringBuffer();temp.append(result);temp.append("ok");result=temp.toString();参见:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=752&message=1012&redirect=true&hilite=true&q=string //String类:用于处理那些值不会发生改变的字符串;(其对象都是常量,处理效率高)//StringBuffer类:用于处理那些值可能发生改变的字符串; //我看了一下jdk141 stringbuffer的源代码。大致了解如下:1、StringBuffer 初始化是 16个字符的char数组。 每次按+1乘2的速度增长。 int newCapacity = (value.length + 1) * 2;2、方法基本上使用synchronized 关键字,可以多线程安全使用。总结一下: 3、对于静态处理,如:储存字符串,用String动态改变字符串内容则使用StringBuffer4、循环内部绝对不要使用String相加。疑问:5、concat是什么?6、使用synchronized 就能保证多线程安全吗?如:public class A { private char[] value = new char[256]; private int count = 0 ; public synchronized int FunA(char c){ value[count ++] = c; return count; } public synchronized int FunB(char c){ value[count ++] = c; return count; }}这样一个例子能够保证多线程安全吗?我怎么觉得不行。synchronized的意思是不是不能够重入?谢谢大家,请继续讨论。 如果字符串要频繁修改的话,用StringBuffer效率要好于String StringBuffer 主要用语大量的、频繁的字符串连接 up 一下。疑问:5、concat是什么?6、使用synchronized 就能保证多线程安全吗?如:public class A { private char[] value = new char[256]; private int count = 0 ; public synchronized int FunA(char c){ value[count ++] = c; return count; } public synchronized int FunB(char c){ value[count ++] = c; return count; }}这样一个例子能够保证多线程安全吗?我怎么觉得不行。synchronized的意思是不是不能够重入? 买一本 高质量java程序设计 看看吧,第15章对搂主的问题有非常详细的解释并配有测试程序和数据 谁有这本书!《Java语言程序设计习题解答与实践教程》 姜志强 简单线程等待问题 各位大侠帮帮忙,出主意者均有分 一条奇怪的命令 關於jxl的問題 如何从指定的路径或目录下过滤出想要的文件? 如何自己发送消息? ****200分大放送!(肯定给)解决applet与二进制数组问题**** 数据库连结问题,送20分 不明白,怎么这个还产生空指针异常。 在线高分想送!!!有关jbuilder开发网络应用程序 帮我 看看阿 ?
但如果涉及到连接字符串的时候,对于String每次连接都要重新分配内存,因此StringBuffer好些
总之,对于静态处理,如:储存字符串,用String
动态改变字符串内容则使用StringBuffer
循环内部绝对不要使用String相加。
String new一次倒是你指定的大小,但是String + 每次都会生成新的实例。
所以,频繁操作的字符串用StringBuffer,否则,String,当然,多少次操作算频繁,就是一个经验和自己掌握的问题了。
String s="";
for(int i=0;i<1024;i++){
s+=i+"";
}
每一次循环都要new一次,
而用StringBuffer除非容量不够,不许要用new,
而new的运行时间花费是非常大的
String result="";
result+="ok";通过使用javap工具我们可以知道其实上面的代码在编译成字节码的时候等同的源代码是:
String result="";
StringBuffer temp=new StringBuffer();
temp.append(result);
temp.append("ok");
result=temp.toString();
参见:http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=752&message=1012&redirect=true&hilite=true&q=string
//StringBuffer类:用于处理那些值可能发生改变的字符串;
1、StringBuffer 初始化是 16个字符的char数组。 每次按+1乘2的速度增长。
int newCapacity = (value.length + 1) * 2;
2、方法基本上使用synchronized 关键字,可以多线程安全使用。总结一下: 3、对于静态处理,如:储存字符串,用String
动态改变字符串内容则使用StringBuffer4、循环内部绝对不要使用String相加。疑问:
5、concat是什么?6、使用synchronized 就能保证多线程安全吗?
如:
public class A {
private char[] value = new char[256];
private int count = 0 ;
public synchronized int FunA(char c){
value[count ++] = c;
return count;
} public synchronized int FunB(char c){
value[count ++] = c;
return count;
}}
这样一个例子能够保证多线程安全吗?我怎么觉得不行。synchronized的意思是不是不能够重入?谢谢大家,请继续讨论。
疑问:
5、concat是什么?6、使用synchronized 就能保证多线程安全吗?
如:
public class A {
private char[] value = new char[256];
private int count = 0 ;
public synchronized int FunA(char c){
value[count ++] = c;
return count;
} public synchronized int FunB(char c){
value[count ++] = c;
return count;
}}
这样一个例子能够保证多线程安全吗?我怎么觉得不行。synchronized的意思是不是不能够重入?