JavaRush /Blog Jawa /Random-JV /String += String utawa StringBuilder.append(String)?
SemperAnte
tingkat
Донецк

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

Diterbitake ing grup
Ing artikel iki, Aku kaya nimbang, njelasno, marang lan nuduhake apa prabédan antarane cara append saka kelas StringBuilderlan operator +=kanggo String. Ing kene pitakonan bakal ora akeh ing area aplikasi kaya ing optimasi kode.
String += String utawa StringBuilder.append(String)?  - 1
Ya, wong sing mesthi ora ngerti pitakonan iki bakal ujar: "Yagene aku kudu ngganti operator += kanthi nggawe obyek anyar saka kelas sing beda-beda, banjur nelpon cara kasebut uga toString()? Apa jenis optimalitas kita. ngomong apa? Pilihan wis jelas, sampeyan ngomong apa?" lan dheweke bakal salah. Salah sawijining masalah yaiku Stringora primitif. String- obyek kaya liyane classing Jawa, lan sing ngerti, ing Jawa ora ana operator overloading (Kaya ing C ++, contone,), operator ditetepake mung kanggo primitif, lan kanggo kelas sembarang kita ora bisa ngalahake operator sembarang. Pramila operator " +" lan " +=" minangka jinis "kruk" perpustakaan Jawa, lan kruk tansah ngalami kerugian. Bener, ayo mandheg narik buntut kucing lan pindhah menyang pangukuran. Punika program prasaja sing ngukur wektu kanggo "lem" baris karo variabel daur ulang 100.000 kaping.
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");
    }
}
Ing komputer, 6815ms ditampilake ing console. Yaiku, komputerku meh 7 detik kanggo nggawe garis iki. Saiki ayo ngganti karo StringBuilder lan malah kalebu metode toString()ing pangukuran.
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");
    }
}
PCku ngandhani 10ms. Yaiku, 0,01 Detik. Aku mikir prabédan ing praktik cukup jelas; kira-kira, kerjane 700 kaping appendluwih cepet. Iki amarga kasunyatan sing paling kamungkinan " +" lan " +=" piyambak bisa nelpon append padha, nanging ing wektu sing padha wis liwat dalan dawa liwat crutches basa kanggo ngerti sing operator kuwi malah ana lan apa iku. kudu nindakake (paragraf pungkasan ora luwih saka guess, Aku ora pangembang JVM lan aku ora ngerti apa ana lan carane). Iki minangka conto sing jelas babagan kasunyatan manawa obyek ekstra ora mesthi larang. Ya, kode kasebut bakal dadi sawetara baris maneh, nanging irit wektu ing proyek gedhe bisa dadi kolosal. Wigati dimangerteni manawa pangukuran kasebut ora digawe ing PC kantor kanthi prosesor prasejarah, nanging saiki bayangake apa bedane sing bakal ditindakake ing komputer kantor iki, sing meh ora bisa narik selendang.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION