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

这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的方式其實就是同一種方式,效率是一樣的,童叟無欺。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板