說真的,現在ram要多大有多大,CPU也飛快,CPU和記憶體對一堆系統已經不在是個問題,所以字串這麼多不同的處理方式,其效率和佔記憶體大小,也越來越多人不在意了。
但我寫程式還是習慣參考 Effective Java 或 Effective C++ 的建議,畢竟那是一堆神人的經驗,應該蠻值得參考的,而且多動手實際試試看,不會有損失。
importjava.io.*;
importjava.util.Date;
publicclassStringTest{
publicstaticvoidmain(String[]args){
inti=0;
longprev_time;
longtime;
Runtimeruntime=Runtime.getRuntime();
longmemory;
Strings;
intmax=100000;
System.out.println("Approach\tTime(ms)\tMemoryallocated(long)");
prev_time=System.currentTimeMillis();
memory=runtime.freeMemory();
for(i=0;i<max;i++){
s="XXX"+i+"YYY";
}
time=System.currentTimeMillis()-prev_time;
memory=memory-runtime.freeMemory();
System.out.println("+operator\t"+time+"\t\t"+memory);
prev_time=System.currentTimeMillis();
memory=runtime.freeMemory();
for(i=0;i<max;i++){
s=String.format("XXX%dYYY",i);
}
time=System.currentTimeMillis()-prev_time;
memory=memory-runtime.freeMemory();
System.out.println("String.format\t"+time+"\t\t"+memory);
prev_time=System.currentTimeMillis();
memory=runtime.freeMemory();
StringBuffersb=newStringBuffer();
for(i=0;i<max;i++){
sb.delete(0,sb.length());
sb.append("XXX").append(i).append("YYY");
s=sb.toString();
}
time=System.currentTimeMillis()-prev_time;
memory=memory-runtime.freeMemory();
System.out.println("StringBuffer\t"+time+"\t\t"+memory);
prev_time=System.currentTimeMillis();
memory=runtime.freeMemory();
StringBuildersb1=newStringBuilder();
for(i=0;i<max;i++){
sb1.delete(0,sb1.length());
sb1.append("XXX").append(i).append("YYY");
s=sb1.toString();
}
time=System.currentTimeMillis()-prev_time;
memory=memory-runtime.freeMemory();
System.out.println("StringBuilder\t"+time+"\t\t"+memory);
}
}