1、在拼接字符串的时候,String通过+号的方式来拼接,在java的底层实现上会通过创建一个StringBuilder来拼接字符串。
2、但是在for循环中使用String的+来拼接的话会在每一个for循环中创建一个StringBuilder来实现。会降低效率,所以在需要通过循环来拼接字符创的话,建议使用StringBuilder来实现。
public
class
WhitherStringBuilder {
public
static
String implicit(String[] fields){
String str =
""
;
for
(String s : fields){
str+=s;
}
return
str;
}
public
static
String explicit (String[] fields){
StringBuilder sb =
new
StringBuilder();
for
(String s : fields){
sb.append(s);
}
return
sb.toString();
}
public
static
void
main(String[] args) {
int
length = 10000;
String[] fields =
new
String[length];
for
(
int
i = 0;i<length;i++){
fields[i] =
"study"
;
}
long
beginTime = System.currentTimeMillis();
implicit(fields);
System.
out
.println(System.currentTimeMillis()-beginTime);
beginTime = System. currentTimeMillis();
explicit(fields);
System.
out
.println(System.currentTimeMillis()-beginTime);
}
}
|
输出结果:
1183
1
|
在for循环中使用String的+来实现拼接和实现StringBuilder来实现,效率相差很大。
3、在使用StringBuilder来实现的时候,还可以接续优化,通过指定StringBuilder的大小,可以减小缓存分配的操作。
public
class
WhitherStringBuilder {
public
static
String implicit(String[] fields){
StringBuilder sb =
new
StringBuilder();
for
(String s : fields){
sb.append(s);
}
return
sb.toString();
}
public
static
String explicit(String[] fields){
StringBuilder sb =
new
StringBuilder(5000000);
for
(String s : fields){
sb.append(s);
}
return
sb.toString();
}
public
static
void
main(String[] args) {
int
length = 1000000;
String[] fields =
new
String[length];
for
(
int
i = 0;i<length;i++){
fields[i] =
"study"
;
}
long
beginTime = System. currentTimeMillis();
implicit(fields);
System.
out
.println(System.currentTimeMillis()- beginTime);
beginTime = System. currentTimeMillis();
explicit(fields);
System.
out
.println(System.currentTimeMillis()- beginTime);
}
}
|
输出结果:
130
57
|