请教一个关于StringBuffer与String 用于字符窜的效率问题。谢谢 i prefer stringbuffer, but how much the performance improved, i can't measure. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 long startTime, endTime1, endTime2;StringBuffer buf;String str;startTime = System.currentTimeMillis();for( long i = 0; i < 1000000; i ++ ) { buf=new StringBuffer(); buf.append("**");}endTime1 = System.currentTimeMillis() - startTime;startTime = System.currentTimeMillis();for( long i = 0; i < 1000000; i ++ ) { str=""; str=str+"**";//or str += "**";}endTime2 = System.currentTimeMillis() - startTime;javax.swing.JOptionPane.showMessageDialog( null, "use Buffer time = " + new Long( endTime1 ).toString() + " 毫秒" + "use String time = " + new Long( endTime1 ).toString() + " 毫秒" ); 不行的话再改循环次数,这个测试的是时间使用,没测内存的使用,那个俺可不会 StringBuffer!可以测试一下:StringBuffer lsb = new StringBuffer();for(int i=0;i=1024*60;i++){ lsb.append("1"); //此处或者使用string +}看等待时间你就知道了。 String 每次都要new一个新的实例StringBuffer如果append后的长度不大于它目前的数组长度就直接写进去;如果append后的长度大于它目前的数组长度就new一个(现在长度+1)*2的数组(长度不能大于Integer.MAX_VALUE),在把字符串写进去。知道怎么实现的了,什么情况下哪种效率高吧 还用说,当然是StringBuffer,String类是在StringBuffer类上包装了一下以求更好的易用性. java中StringBuffer与String在处理字符串时在效率上有很大的差异,尤其是当字符串很时! 字符串对象(String对象)的直是不可改变的,一旦创建了String类对象,就不能在改变其直,引起字符串的属性和长度改变的操作,将会得到一个复制了原对象中所需部分的新String对象(java实现努力试图将同一个类中的同样的字符串和字符的直合并到一个共享的字符串池中)。 StringBuffer类是一个为字符提供的可增大的缓冲区,他向缓冲区附加各种类型的数据,提供了大量的Append()方法的重载。例如以下例子: String testStr = "hello"; testStr = testStr + " world"; testStr = testStr + " how are you";这里用String会反复产生新的String对象,字符数组必须反复复制,着对性能回产生负面影响。若使用StringBuffer类则为更好: StringBuffer testStrBuff = new testStrBuff("hello"); testStrBuff.append(" world"); testStrBuff.append(" how are you");楼主有一个比较多,长的字符串,应该是用StringBuffer来操作,建议可以把这个字符串接成几个字符串来处理,调用append方法类追加,这样将比使用String类有非常大的效率提升!! 同意OExpress(浪子猫),String是不可变的,每次这样的操作会产生很多的String,以前做过测试,大量的字符串拼接操作,由String改为StringBuffer后,由3分钟缩短为2分钟。 volatile的问题 JAVA反射问题,关于反射后找寻方法的问题 java中定时等待的问题 如何将一串String类型的IP地址,转化成4字节数据 怎么从今年的多少天推算出这一天的日期?或怎么从星期数得到这一星期的范围? 放弃j2ee从事j2me手游开发是否值得? 【分享】修改properties类源代码,让配置文件的读写操作完全支持中文。 能具体讲一下吗?(我是新手) 看个小程序 &&&&&&&&&&&&rational rose 2002电子书有吗? 如何在FRAME里随意改变控件(如button)的位置? 为什么不能获得焦点事件
StringBuffer buf;
String str;startTime = System.currentTimeMillis();
for( long i = 0; i < 1000000; i ++ ) {
buf=new StringBuffer();
buf.append("**");
}
endTime1 = System.currentTimeMillis() - startTime;
startTime = System.currentTimeMillis();
for( long i = 0; i < 1000000; i ++ ) {
str="";
str=str+"**";//or str += "**";
}
endTime2 = System.currentTimeMillis() - startTime;javax.swing.JOptionPane.showMessageDialog( null,
"use Buffer time = " + new Long( endTime1 ).toString() + " 毫秒" +
"use String time = " + new Long( endTime1 ).toString() + " 毫秒" );
不行的话再改循环次数,这个测试的是时间使用,没测内存的使用,那个俺可不会
可以测试一下:
StringBuffer lsb = new StringBuffer();
for(int i=0;i=1024*60;i++)
{
lsb.append("1");
//此处或者使用string +
}
看等待时间你就知道了。
String类是在StringBuffer类上包装了一下以求更好的易用性.
字符串对象(String对象)的直是不可改变的,一旦创建了String类对象,就不能在改变其直,引起字符串的属性和长度改变的操作,将会得到一个复制了原对象中所需部分的新String对象(java实现努力试图将同一个类中的同样的字符串和字符的直合并到一个共享的字符串池中)。
StringBuffer类是一个为字符提供的可增大的缓冲区,他向缓冲区附加各种类型的数据,提供了大量的Append()方法的重载。
例如以下例子:
String testStr = "hello";
testStr = testStr + " world";
testStr = testStr + " how are you";
这里用String会反复产生新的String对象,字符数组必须反复复制,着对性能回产生负面影响。若使用StringBuffer类则为更好:
StringBuffer testStrBuff = new testStrBuff("hello");
testStrBuff.append(" world");
testStrBuff.append(" how are you");
楼主有一个比较多,长的字符串,应该是用StringBuffer来操作,建议可以把这个字符串接成几个字符串来处理,调用append方法类追加,这样将比使用String类有非常大的效率提升!!
String是不可变的,
每次这样的操作会产生很多的String,
以前做过测试,
大量的字符串拼接操作,
由String改为StringBuffer后,
由3分钟缩短为2分钟。