stringbuilder - java StringBuilding 定义
PHP中文网
PHP中文网 2017-04-18 10:18:25
0
6
734

这2种定义方式 有不同吗??
第一种会慢吗?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(6)
伊谢尔伦

答案:一样快

String 的初始化操作:

String s= "a"+"b";
String s1= "ab";

这样子编译器是默认相同的。所以不会慢

再如:

  String a= "a";
  String b = "b";
  String s2= a+b;

这样子的出来的 s2 就非常慢,因为内存申请了3次。

望采纳,如果满意快给我积分。。我是新加入的成员,希望能为大家服务!!!(真想给第一个回答来个-1分,瞎几把回答)

阿神

第一种那不止是慢的问题,而是一段像屎的一样代码。

new StringBuilder("a").append("b").append("c");

new StringBuilder("a" + "b" + "c");

如果你像上面这种用,那还不如直接使用"a" + "b" + "c"因为没有使用到StringBuilder的任何特性,加上JDK的编译优化最终代码会变成如下。

new StringBuilder(new StringBuilder("a").append("b").append("c").toString());

第二种完全没看懂啊。使用StringBuilder的意义是什么?本身不就是一个字符串了吗?

迷茫

javap -c看看,编译器应该会把你用+连接起来的字符串常量拼接到一起,两种写法运行起来应该是一样的。

小葫芦

常量直接 +
变量也可以 +
很在乎性能的话看这个:http://calvin1978.blogcn.com/...

PHPzhong

只要不是对象之间使用拼接符‘+’,字符串之间使用拼接符‘+’和不使用基本上都没有什么差别; 而string对象一旦产生后,被修就会再产生一个对象 所有string对象之间拼接会很慢;

public static void main(String[] args) {

fun1(10000000);

}
private static void fun1(int length){

long min1 = new Date().getTime();
System.out.println(min1);
//1
for(int i=0;i<length;i++){
    new StringBuffer("字符1;" +
            "字符2;" +
            "字符3;" +
            "字符4;" +
            "字符5;");
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);

}
private static void fun2(int length){

long min1 = new Date().getTime();
System.out.println(min1);
//2
for(int i=0;i<length;i++){
    new StringBuffer("字符1;字符2;字符3;字符4;字符5;");
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);

}
private static void fun3(int length){

long min1 = new Date().getTime();
System.out.println(min1);
//3
for(int i=0;i<length;i++){
    String aa = "字符1;" +
    "字符2;" +
    "字符3;" +
    "字符4;" +
    "字符5;";
    new StringBuffer(aa);
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);

}
private static void fun4(int length){

long min1 = new Date().getTime();
System.out.println(min1);
//3
for(int i=0;i<length;i++){
    String aa = "字符1;" ;
    aa +="字符2;" ;
    aa +="字符3;" ;
    aa +="字符4;" ;
    aa +="字符5;";
    new StringBuffer(aa);
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);

}

巴扎黑

通过这两种创建对象的方式比较快慢,实际上可以转化为下面两种方式比较快慢:

String a = "Test";
String b = "T" + "e" + "s" + "t";

这两种方式当然是一样快的啦,在JVM中其实就是把"T" + "e" + "s" + "t"当做"Test"进行处理。
我们现在来看一下下面这种字符串拼接的方式:

String a = "Te";
String b = a + "st";

上面这种方式是字符串拼接效率最低的方式,是极为不推荐的,因为这种字符串拼接的时候,JVM其实就是生成一个新的StringBuilder,然后调用append方法,然后再进行toString,速度简直是慢成狗(狗:我又躺枪。。。)
所以综上所述:题主所写的这两种new StringBuilder的方式其实就是同一种方式,效率是一样的,童叟无欺。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板