Melihat penjelasan ini bagus, jadi saya akan membalikkannya
Ada 3 kelas di Java yang bertanggung jawab untuk operasi karakter.
1. Karakter adalah operasi karakter tunggal.
2.String beroperasi pada serangkaian karakter, kelas immutable.
3.StringBuffer juga merupakan operasi pada serangkaian karakter dan merupakan kelas yang bisa berubah.
Rangkaian:
Ini adalah objek, bukan tipe primitif.
Ini adalah objek yang tidak dapat diubah dan begitu dibuat, nilainya tidak dapat dimodifikasi.
Modifikasi objek string yang ada adalah membuat ulang objek baru dan menyimpan nilai baru di dalamnya.
String adalah kelas terakhir, yaitu, tidak dapat diwarisi.
StringBuffer:
Itu adalah objek yang bisa berubah.
Itu hanya dapat dibuat oleh konstruktor,
StringBuffer SB = StringBuffer baru ();
Catatan: Itu tidak dapat dibayar dengan simbol penugasan.
SB = "Selamat Datang di Sini!"; // Kesalahan
Setelah objek dibuat, ruang memori akan dialokasikan dalam memori dan nol pada awalnya akan disimpan.
SB.Append ("Hello");
Efisiensi StringBuffer lebih tinggi dari string dalam gabungan string:
String str = new string ("Welcome to");
str += "di sini";
Langkah pemrosesan sebenarnya dengan membuat StringBuffer, lalu memanggil append (), dan akhirnya
Kemudian tambahkan stringBuffer tosting ();
Dengan cara ini, operasi koneksi string akan memiliki beberapa operasi tambahan daripada StringBuffer, dan tentu saja efisiensi akan dikurangi.
Dan karena objek string adalah objek yang tidak dapat diubah, setiap operasi sengatan akan membuat ulang objek baru untuk menyimpan nilai baru.
Dengan cara ini, objek asli akan tidak berguna dan akan dikumpulkan sampah.
Lihatlah kode berikut:
Ulangi 26 huruf bahasa Inggris 5.000 kali.
Salinan kode adalah sebagai berikut:
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int kali = 5000;
long lstart1 = system.currentTimemillis ();
String str = "";
untuk (int i = 0; i <kali; i ++) {
str += tempstr;
}
Long Lend1 = System.CurrentTimeMillis ();
Long Time = (Lend1 - Lstart1);
System.out.println (waktu);
Sayangnya, komputer saya bukan superkomputer, dan hasil yang saya dapatkan tidak harus sama setiap kali, biasanya sekitar 46687.
Itu adalah 46 detik.
Mari kita lihat kode berikut
Salinan kode adalah sebagai berikut:
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int kali = 5000;
long lstart2 = system.currentTimemillis ();
StringBuffer SB = StringBuffer baru ();
untuk (int i = 0; i <kali; i ++) {
SB.Append (Tempstr);
}
Long Lend2 = System.CurrentTimeMillis ();
long time2 = (lend2 - lstart2);
System.out.println (Time2);
Hasilnya adalah 16 dan terkadang 0
Jadi kesimpulannya jelas, kecepatan StringBuffer hampir puluhan ribu kali string. Tentu saja, data ini tidak terlalu akurat. Karena jumlah siklus 100.000 kali, perbedaannya bahkan lebih besar. Jika Anda tidak mempercayai saya, coba
Jika Anda masih tidak bisa mengerti:
1) Perbedaan antara metode gabungan + string dan metode append dari StringBuff:
Ketika Operator String + melakukan operasi string, pertama -tama mengonversi objek string saat ini menjadi tipe StringBuff, memanggil metode append -nya, dan akhirnya mengonversi objek StringBuff yang dihasilkan ke string string string melalui metode ToString -nya, sehingga tidak efisien.
Namun, dalam hal keterbacaan, operator koneksi string masih tinggi.
2) StringBuff aman
String tidak aman untuk utas
3) String adalah objek string yang tidak dapat dimodifikasi, sedangkan StringBuff dimodifikasi.
Salinan kode adalah sebagai berikut:
FileCopy Boolean Statis Publik (String SRCSTR, String Deststr) {
File srcfile = null;
File destfile = null;
Pembaca pembaca = null;
Penulis penulis = null;
bendera boolean = false;
mencoba {
srcfile = file baru (srcstr);
if (! srcfile.exists ()) {
System.out.println ("File sumber tidak ada");
System.exit (0);
} kalau tidak {
pembaca = filereader baru (srcfile);
}
destfile = file baru (deststr);
penulis = FileWriter baru (destfile);
char [] buff = char baru [1024];
int len;
String str = "";
StringBuffer sBuff = StringBuffer baru ();
while ((len = reader.read (buff))! = -1) {
// str += string baru (buff, 0, len);
sbuff.append (string baru (buff, 0, len));
}
// writer.write (str.tochararray ());
writer.write (sbuff.tostring (). tochararray ());
bendera = true;
writer.flush ();
reader.close ();
writer.close ();
} catch (ioException e) {
System.out.println ("Pengecualian Salin File: =" + E.GetMessage ());
}
pengembalian bendera;
}