Article View: cn.bbs.comp.lang.java
Article #21023[zz]ʹ��String����StringBuffer?
From: Java & .Net
Date: Sun, 14 Dec 2003 06:27
Date: Sun, 14 Dec 2003 06:27
32 lines
4849 bytes
4849 bytes
cherami ԭ�� From http://www.javaresearch.org
���ڷ���Ŀ��ǣ������ڽ����ַ�����ݴ����ʱ�������������µĴ��룺
String result="";
result+="ok";
��δ��뿴��ȥ����û��ʲô���⣬������Ҫָ�����������ܺܵͣ�ԭ����java�е�String��ɱ�ģ�immutable������δ���ʵ�ʵĹ�����̻�����ε��أ�ͨ��ʹ��javap�������ǿ���֪����ʵ����Ĵ����ڱ�����ֽ����ʱ���ͬ��Դ�����ǣ�
String result="";
StringBuffer temp=new StringBuffer();
temp.append(result);
temp.append("ok");
result=temp.toString();
�̶̵����������ô�ر����ô���أ������ԭ�����String��IJ��ɱ����ϣ���java����Ϊ�˷�����ַ�ʹ�÷�ʽ��+��������������أ���������صĴ����������ܶ��java��String��ʹ�á�
������һ������Ĵ��룺
public class Perf { public static String detab1(String s) { if (s.indexOf('\t') == -1) return s; String res = ""; int len = s.length(); int pos = 0; int i = 0; for (; i < len && s.charAt(i) == '\t'; i++) { res +=
" "; pos += 8; } for (; i < len; i++) { char c = s.charAt(i); if (c == '\t') { do { res += " "; pos++; } while (pos % 8 != 0); } else { res += c; pos++; } }
return res; } public static String detab2(String s) { if (s.indexOf('\t') == -1) return s; StringBuffer sb = new StringBuffer(); int len = s.length(); int pos = 0; int i = 0; for (; i < len && s.charAt(i) == '\t';
i++) { sb.append(" "); pos += 8; } for (; i < len; i++) { char c = s.charAt(i); if (c == '\t') { do { sb.append(' '); pos++; } while (pos % 8 != 0); } else {
sb.append(c); pos++; } } return sb.toString(); } public static String testlist[] = { "", "\t", "\t\t\tabc", "abc\tdef", "1234567\t8", "12345678\t9", "123456789\t" }; public static void
main(String args[]) { for (int i = 0; i < testlist.length; i++) { String tc = testlist[i]; if (!detab1(tc).equals(detab2(tc))) System.err.println(tc); } String test_string = "\t\tthis is a test\tof detabbing
performance"; int N = 5000; int i = 0; long ct = System.currentTimeMillis(); for (i = 1; i <= N; i++) detab1(test_string); long elapsed = System.currentTimeMillis() - ct; System.out.println("String time = " +
elapsed); ct = System.currentTimeMillis(); for (i = 1; i <= N; i++) detab2(test_string); elapsed = System.currentTimeMillis() - ct; System.out.println("StringBuffer time = " + elapsed); }}
ִ�����ϴ���Ľ����Կ���ʹ��StringBuffer�İ汾�ķ�����ʹ��String�汾��һ�㶼��ʮ�����ϣ�����ʹ�õ���JDK1.4.0��,�����ִ��һ�¿���������Ρ�
��˵õ��Ľ����ǣ��������ַ��е����ݾ������в������ر�������Ҫ��ʱ����ôʹ��StringBuffer����������ҪString����ôʹ��StringBuffer��toString()�������ˣ�Ҳ���������ij��������ƿ����
-- �ο��أ��α��أ�
[m[1;31m�� ��Դ:��Ʈ��ˮ�Ƽ� Freecity.dhs.org��[FROM: skyhit][m
Technical Details
Message-ID:
<49dY32$A0U@Freecity.dhs.org>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newshosting.com!news-xfer2.atl.newshosting.com!news-feed01.roc.ny.frontiernet.net!nntp.frontiernet.net!prodigy.com!prodigy.com!rip!sjc70.webusenet.com!news.webusenet.com!maily.cic.tsinghua.edu.cn!news.ccie.net.cn!FreecityShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: f6cb0,25f99bcbedd47518,start X-Google-Attributes: gidf6cb0,public X-Google-ArrivalTime: 2003-12-13 22:27:39 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!newshosting.com!news-xfer2.atl.newshosting.com!news-feed01.roc.ny.frontiernet.net!nntp.frontiernet.net!prodigy.com!prodigy.com!rip!sjc70.webusenet.com!news.webusenet.com!maily.cic.tsinghua.edu.cn!news.ccie.net.cn!Freecity From: skyhit.bbs@Freecity.dhs.org (Java & .Net) Newsgroups: cn.bbs.comp.lang.java Subject: [zz]ʹ��String����StringBuffer? Date: 14 Dec 2003 06:27:18 GMT Organization: Ʈ��ˮ�Ƽ� Message-ID: <49dY32$A0U@Freecity.dhs.org> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit X-Filename: Java/M.1071383186.A