JAVA服务器端性能优化----String

时间:2014-07-22 23:02:33   收藏:0   阅读:311

String的连接

方法1 使用+=

String s = new String();

for (int i = 0; i < 10000; i++){

  s+= "a";

}

 

方法2 使用带缓冲区的StringBuffer

StringBuffer s = new StringBuffer();

for (int i = 0; i < 10000; i++){

 s.append("a")

}

 

方法1执行时间大概在2000ms左右,方法2却只要10ms左右。

  s+= "a" 实际上被转换成了

s = (new StringBuffer()).append(s).append(“a”).toString();

反复多次的创建新对象,自然会消耗更多的时间

注意:像 s = “a” + “b” + “c” 这样的语句,切勿写成 s = “a” ; s += “b”; s += “c”; 不然又要多消耗很多时间。s = “a” +“b” + “c” 本身会被编译为s = _-temp,而__temp = “abc”.

 

当然,如果因为程序要求s 是由三个变量a,b,c连接而成,那么请使用s = a + b + c 而不是s = a; s += b; s += c;

 

String的比较

假设有两个字符串a,b,现在需要忽略大小写来比较

 

方法1

ic_a = a.toUpperCase();

ic_b = b.toUpperCase();

a.equals(b);

 

方法2

a.equalsIgnoreCase(b);

 

方法1的执行时间会远远大于方法2

 

还是这两个字符串a,b,下面给定5种情况

 

情况1

a = "he" + "llo"

b = "hello"

使用a.equals(b);来比较

 

情况2

a = "hellO"

b = "hello"

使用a.equals(b);来比较

 

情况3

a = "hello1"

b = "hello"

使用a.equals(b);来比较

 

情况4

a = "hellO"

b = "hello"

使用a. equalsIgnoreCase (b);来比较

 

情况5

a = "hello1"

b = "hello"

使用a. equalsIgnoreCase (b);来比较

 

 

执行时间会是 情况4>情况2 >情况3 >情况5 >情况1. 情况1中,由于编译器的优化,a和b实际上指向同一个字符串,比较速度自然快。情况2需要比较到最后一个字符才知道不同,因此时间长。而情况4比较的维度比2更多,因此时间还要长。而情况3,5由于两个字符串的长度不一样,也可以比较快的比较出结果,但是会略慢于情况1。为什么情况5会比情况3快一点呢,是因为equalsIgnoreCase检查长度的步骤比equals中早一点。

 

 

JAVA服务器端性能优化----String,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!