package com.hhb.base;public class StringTest2 {
/** * @param args */ public static void main(String[] args) { long start=System.currentTimeMillis(); String hello="Hello"; for(int i=0;i<100;i++){ hello+=hello; } long end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); start=System.currentTimeMillis(); StringBuffer buffer=new StringBuffer(); for(int i=0;i<10;i++){ buffer.append("hello").append(i); } end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); start=System.currentTimeMillis(); StringBuilder builder=new StringBuilder(); for(int i=0;i<1000;i++){ builder.append("hello").append(i); } end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start)); }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at com.hhb.base.StringTest2.main(StringTest2.java:13)
跟性能没什么关系,问题是这段代码:
String hello="Hello";
for(int i=0;i<100;i++){
hello+=hello;
}
hello是以指数级增长的,不用99次方就撑爆内存了。
Try it
[code="python"]
STR = 'a'
for i in range(0, 10):
STR += STR
print(len(STR))
[/code]
当线程情况下,请用StringBuilder代替,多线程共享访问请用StringBuffer代替。
StringBuffer