JavaRush /Java Blog /Random-ID /String += String atau StringBuilder.append(String)?
SemperAnte
Level 4
Донецк

String += String atau StringBuilder.append(String)?

Dipublikasikan di grup Random-ID
Pada artikel ini, saya ingin mempertimbangkan, menganalisis, memberi tahu, dan menunjukkan apa perbedaan antara metode penambahan dari kelas StringBuilderdan operator +=untuk String. Di sini pertanyaannya bukan pada bidang aplikasi melainkan pada optimasi kode.
String += String atau StringBuilder.append(String)?  - 1
Ya, seseorang yang pasti belum mendalami pertanyaan ini akan berkata: "Mengapa saya harus mengganti operator += dengan membuat objek baru dari kelas yang sama sekali berbeda, dan kemudian memanggil metodenya juga toString()? Optimalitas seperti apa yang kita miliki? dibicarakan? Pilihannya sudah jelas, apa yang kamu bicarakan?” dan dia akan sepenuhnya salah. Salah satu masalahnya adalah Stringia tidak primitif. String- sebuah objek seperti objek lainnya classdi Java, dan seperti yang Anda ketahui, di Java tidak ada yang namanya kelebihan beban operator (Seperti di C++, misalnya), operator didefinisikan hanya untuk primitif, dan untuk kelas mana pun kita tidak dapat mengganti operator mana pun. Itulah sebabnya operator " +" dan " += " adalah semacam "penopang" perpustakaan Java, dan penopang selalu menimbulkan kerugian. Sebenarnya, mari kita berhenti menarik ekor kucing dan melanjutkan ke pengukuran. Berikut adalah program sederhana yang mengukur waktu yang diperlukan untuk “merekatkan” garis dengan variabel loop sebanyak 100.000 kali.
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        String s = "Hello";
        for(int i = 0; i < 100000; ++i)
        {
            s+=i;
        }
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
Di komputer saya, 6815ms ditampilkan di konsol. Artinya, komputer saya membutuhkan waktu hampir 7 detik untuk menyatukan garis ini. Sekarang mari kita ganti dengan StringBuilder dan bahkan menyertakan metode ini toString()dalam pengukurannya.
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        StringBuilder sb = new StringBuilder("Hello");
        for(int i = 0; i < 100000; ++i)
        {
            sb.append(i);
        }
        String s = sb.toString();
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
PC saya memberi tahu saya 10ms. Artinya, 0,01 Detik. Saya pikir perbedaan dalam praktiknya cukup jelas; secara kasar, ini bekerja 700 kali appendlebih cepat. Hal ini disebabkan oleh fakta bahwa kemungkinan besar " " +dan " +=" dapat memanggil penambahan yang sama, tetapi pada saat yang sama telah melalui banyak penopang bahasa untuk memahami bahwa operator semacam itu ada dan apa itu harus dilakukan (paragraf terakhir tidak lebih dari tebakan, saya bukan pengembang JVM dan saya tidak tahu apa yang ada di sana dan bagaimana caranya). Ini adalah contoh nyata dari fakta bahwa sebuah benda tambahan tidak selalu mahal. Ya, kodenya akan menjadi beberapa baris lebih panjang, tetapi penghematan waktu dalam proyek besar bisa sangat besar. Harap dicatat bahwa pengukuran tidak dilakukan pada PC kantor dengan prosesor prasejarah, tetapi sekarang bayangkan apa perbedaannya pada komputer kantor ini, yang hampir tidak dapat menarik perhatian.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION