Java-da "+" operatoru və StringBuilder istifadə arasında bir performans fərqi varmı?


cavab 1:

Java-da "+" operatoru və StringBuilder istifadə arasında bir performans fərqi varmı?

Bu kimi bir sətirdə:

String string1 = "bir" + "iki"; String string2 = yeni StringBuilder ("bir"). Əlavə et ("iki"). ToString ();

Performansda heç bir fərq olmamalıdır. Əslində, müasir Java ekosistemlərində, birincisi tərtib zamanı ikincisi üçün optimallaşdırılmışdır. Bunu hərəkətdə görmək üçün, seçdiyiniz debugger-dən başlamağa çalışın.

Bununla birlikdə, ayrı-ayrı sətirlərdə və ya, məsələn, bir loopda sətirləri bağlasanız:

Simli string1 = ""; StringBuilder sb = yeni StringBuilder (); for (Integer i = 0; i <5; i ++) {string1 = string1 + i.toString (); sb.append (i.toString ()); } Simli string2 = sb.toString ();

Sonra StringBuilder istifadə daha "səmərəli" və bəzən daha mürəkkəb bir simli yaratmaq üçün üstünlük verilən metoddur. Bildiyimə görə, hazırda heç bir Java tərtibçisi StringBuilder-də + təkrarlamasını optimallaşdırmır.


cavab 2:

Qısa cavab: Bu ola bilər, amma çox vaxt narahat olmağa dəyməz. Erkən optimallaşdırma üzərində aydın kodu seç.

Müasir JVMlər "+" ilə simli birləşməni optimallaşdıra və bir StringBuilder-ə çevirə bilər. Yaranan sətirin nə qədər olacağını görə bildiyiniz üçün əvvəlində StringBuilder-ə düzgün ölçü təyin edə bilərsiniz. Defolt massiv ölçüsündən istifadə edərək özünüz StringBuilder yaratarsanız, char massivinin sonradan böyüdülməsi tələb oluna bilər. Bunun üçün bir sıra surəti tələb olunur və daha yavaş ola bilər.

Java 9-dan bəri, strayların birləşməsi əhəmiyyətli dərəcədə optimallaşdırıldı, iş vaxtı strategiya quruldu.

Döngədə bir sətirə dəfələrlə əlavə etsəniz, yəqin ki, bir StringBuilder ilə səhv gedə bilməzsiniz, ancaq bilinirsə əvvəlcədən düzgün ölçüsü təyin edin. Bu oxumaq daha asandırsa, döngələrin kənarından "+" yapışdırın. və JVM-in sizdən daha yaxşı optimallaşdıracağına inanın.