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

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

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(6)
伊谢尔伦

Jawapan: Sama pantas

Operasi permulaan rentetan:

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

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?

迷茫

javap -cLihat, 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/...

PHPzhong

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) {

fun1(10000000);
}

keseronokan kekosongan statik peribadi1(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);
}

keseronokan kekosongan statik peribadi2(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);
}

keseronokan kekosongan statik peribadi3(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);
}

keseronokan kekosongan statik peribadi4(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);
}

巴扎黑

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan