Java 字串拼接效率比較

2021-07-16 22:53:43 字數 1933 閱讀 2740

package com.jtzen9;

public

class

main

system.out.println(system.currenttimemillis()-time);

string str2 = "a";

time = system.currenttimemillis();

for (int i = 0; i < 50000; i++)

system.out.println(system.currenttimemillis()-time);

time = system.currenttimemillis();

stringbuilder stringbuilder = new stringbuilder("a");

for (int i = 0; i < 50000; i++)

string str3 = stringbuilder.tostring();

system.out.println(system.currenttimemillis()-time);}}

程式輸出: 

concat源**:

public string concat(string str) 

// 獲取原字串的字元陣列的長度

int len = value.length;

// 將原字串的字元陣列放到buf陣列中

char buf = arrays.copyof(value, len + otherlen);

// 追加的字串轉化成字元陣列,新增到buf中

str.getchars(buf, len);

// 產生乙個新的字串

return

new string(buf, true);

}

整體是乙個陣列的拷貝,雖然在記憶體中是處理都是原子性操作,速度非常快,但是,最後的return語句建立乙個新string物件,也就是每次concat操作都會建立乙個新的string物件,這也是限制concat方法速度的原因。

// 如果是null值,則把null作為字串處理

if (str == null)

int len = str.length();

// 追加後的字元陣列長度是否超過當前值

ensurecapacityinternal(count + len);

// 字串複製到目標陣列

str.getchars(0, len, value, count);

count += len;

return

this;

}int c = count;

ensurecapacityinternal(c + 4);

final char value = this.value;

value[c++] = 'n';

value[c++] = 'u';

value[c++] = 'l';

value[c++] = 'l';

count = c;

return

this;

}private

void

ensurecapacityinternal(int minimumcapacity)

(1)

string str = "my name is ";

str = str + "jtzen9";

(2)

string str = "my name is " + "jtzen9";
jvm會直接把str作為乙個物件,即 「my name is jtzen9」

c 字串拼接效率

1 對於少量固定的字串拼接,如string s a b c 系統會優化成s string.concat a b c 不會新建多個字串。如果寫成string s a s b s c 則會建立三個新的字串。可見,它和stringbuilder有著相似的效率,比用 的拼接方式高效,並且 易於閱讀。stri...

再談「字串拼接」的效率

拼接字串,大體分為兩種方式,一種通過 號拼接 方式1 這種方式在ie6中效率是極其低下的,因此就出現了第二種方式 採用陣列儲存,最後通過join拼接,這種方式的效率在ie6下對比會發現速度差異非常大。此外還有很多朋友估計沒有注意過,陣列拼接的方式又分為兩種,一種是通過push將字串放入陣列 方式2 ...

再談「字串拼接」的效率

拼接字串,大體分為兩種方式,一種通過 號拼接 方式1 這種方式在ie6中效率是極其低下的,因此就出現了第二種方式 採用陣列儲存,最後通過join拼接,這種方式的效率在ie6下對比會發現速度差異非常大。此外還有很多朋友估計沒有注意過,陣列拼接的方式又分為兩種,一種是通過push將字串放入陣列 方式2 ...