🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.lang.java
Article #21023

[zz]ʹ��String����StringBuffer?

#21023
From: Java & .Net
Date: Sun, 14 Dec 2003 06:27
32 lines
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��������ƿ���� 

-- �ο��أ��α��أ� 

�� ��Դ:��Ʈ��ˮ�Ƽ� Freecity.dhs.org��[FROM: skyhit]
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!Freecity

Show 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