Dengan cara ini pengkompil adalah sama secara lalai. Jadi ia tidak akan lambat
Contoh lain:
String a= "a";
String b = "b";
String s2= a+b;
S2 yang dihasilkan seperti ini sangat lambat kerana memori diminta tiga kali.
Saya harap anda akan mengamalkannya dan berikan saya mata jika anda berpuas hati. . Saya ahli baru dan berharap dapat berkhidmat kepada anda semua! ! ! (Saya benar-benar mahu memberikan jawapan pertama mata -1, dan memberikan beberapa jawapan rawak)
Jenis pertama bukan hanya masalah perlahan, tetapi sekeping kod yang kelihatan seperti najis.
new StringBuilder("a").append("b").append("c");
new StringBuilder("a" + "b" + "c");
Jika anda menggunakannya seperti di atas, lebih baik menggunakan "a" + "b" + "c" secara langsung kerana ia tidak menggunakan sebarang ciri StringBuilder Dengan pengoptimuman kompilasi JDK, kod akhir akan menjadi seperti berikut.
new StringBuilder(new StringBuilder("a").append("b").append("c").toString());
Saya tidak faham yang kedua sama sekali. Apakah kepentingan menggunakan StringBuilder? Bukankah ia hanya rentetan itu sendiri?
Selagi aksara penyambung '+' tidak digunakan antara objek, pada asasnya tiada perbezaan antara menggunakan aksara penyambung '+' antara rentetan atau tidak dan setelah objek rentetan dijana, ia akan diubah suai untuk menjana objek lain. Penyambungan antara semua objek rentetan akan menjadi sangat perlahan;
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);
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);
Kedua-dua kaedah mencipta objek ini adalah lebih pantas dan lebih perlahan Malah, ia boleh ditukar kepada dua kaedah berikut untuk membandingkan lebih cepat dan lebih perlahan:
String a = "Test";
String b = "T" + "e" + "s" + "t";
Sudah tentu kedua-dua kaedah ini sama cepat dalam JVM, "T" + "e" + "s" + "t" sebenarnya diproses sebagai "Ujian". Sekarang mari kita lihat kaedah penyambungan rentetan berikut:
String a = "Te";
String b = a + "st";
Kaedah di atas ialah cara yang paling tidak cekap untuk menyambung rentetan, dan amat tidak disyorkan, kerana apabila menyambung rentetan seperti ini, JVM sebenarnya menjana StringBuilder baharu, kemudian memanggil kaedah tambah, dan kemudian melakukan keString hanya perlahan seperti anjing (anjing: Saya berbaring di atas pistol lagi...) Jadi kesimpulannya: dua kaedah StringBuilder baharu yang ditulis oleh subjek sebenarnya adalah kaedah yang sama, dan kecekapannya adalah sama. Tiada siapa yang boleh ditipu.
Jawapan: Sama pantas
Saya harap anda akan mengamalkannya dan berikan saya mata jika anda berpuas hati. . Saya ahli baru dan berharap dapat berkhidmat kepada anda semua! ! ! (Saya benar-benar mahu memberikan jawapan pertama mata -1, dan memberikan beberapa jawapan rawak)
Jenis pertama bukan hanya masalah perlahan, tetapi sekeping kod yang kelihatan seperti najis.
Jika anda menggunakannya seperti di atas, lebih baik menggunakan
"a" + "b" + "c"
secara langsung kerana ia tidak menggunakan sebarang ciriStringBuilder
Dengan pengoptimuman kompilasiJDK
, kod akhir akan menjadi seperti berikut.Saya tidak faham yang kedua sama sekali. Apakah kepentingan menggunakan
StringBuilder
? Bukankah ia hanya rentetan itu sendiri?javap -c
Lihat, pengkompil harus menyambungkan pemalar rentetan yang anda sambungkan+
bersama-sama dan kedua-dua kaedah penulisan harus berjalan sama.Pemalar terus +
Pembolehubah juga boleh digunakan +
Jika anda mementingkan prestasi, baca ini: http://calvin1978.blogcn.com/...
Selagi aksara penyambung '+' tidak digunakan antara objek, pada asasnya tiada perbezaan antara menggunakan aksara penyambung '+' antara rentetan atau tidak dan setelah objek rentetan dijana, ia akan diubah suai untuk menjana objek lain. Penyambungan antara semua objek rentetan akan menjadi sangat perlahan;
utama kekosongan statik awam(String[] args) {keseronokan kekosongan statik peribadi1(int length){
}keseronokan kekosongan statik peribadi2(int length){
}keseronokan kekosongan statik peribadi3(int length){
}keseronokan kekosongan statik peribadi4(int length){
}Kedua-dua kaedah mencipta objek ini adalah lebih pantas dan lebih perlahan Malah, ia boleh ditukar kepada dua kaedah berikut untuk membandingkan lebih cepat dan lebih perlahan:
Sudah tentu kedua-dua kaedah ini sama cepat dalam JVM, "T" + "e" + "s" + "t" sebenarnya diproses sebagai "Ujian".
Sekarang mari kita lihat kaedah penyambungan rentetan berikut:
Kaedah di atas ialah cara yang paling tidak cekap untuk menyambung rentetan, dan amat tidak disyorkan, kerana apabila menyambung rentetan seperti ini, JVM sebenarnya menjana StringBuilder baharu, kemudian memanggil kaedah tambah, dan kemudian melakukan keString hanya perlahan seperti anjing (anjing: Saya berbaring di atas pistol lagi...)
Jadi kesimpulannya: dua kaedah StringBuilder baharu yang ditulis oleh subjek sebenarnya adalah kaedah yang sama, dan kecekapannya adalah sama. Tiada siapa yang boleh ditipu.