Ці ёсць розніца ў прадукцыйнасці Java паміж выкарыстаннем аператара "+" і StringBuilder?


адказ 1:

Ці ёсць розніца ў прадукцыйнасці Java паміж выкарыстаннем аператара "+" і StringBuilder?

У адзіны радок:

String string1 = "адзін" + "два"; String string2 = new StringBuilder ("адзін"). Дадаць ("два"). ToString ();

Не павінна быць розніцы ў характарыстыках. На самай справе, у сучасных экасістэмах Java першая аптымізавана для другой падчас кампіляцыі. Каб убачыць гэта ў дзеянні, паспрабуйце пачаць працу з выбраным адладчыкам.

Аднак, калі вы аб'ядноўваеце радкі ў асобныя радкі ці, напрыклад, у цыкл для:

String string1 = “”; StringBuilder sb = new StringBuilder (); для (Integer i = 0; i <5; i ++) {string1 = string1 + i.toString (); sb.append (i.toString ()); } String string2 = sb.toString ();

Тады выкарыстанне StringBuilder з'яўляецца больш "эфектыўным" і часам пераважным метадам стварэння больш складанай радкі. Наколькі я ведаю, ні адзін кампілятар Java не аптымізуе паўтарэнне + у StringBuilder.


адказ 2:

Кароткі адказ: Магчыма, але большую частку часу пра гэта турбавацца не варта. Аддайце перавагу выразным кодам перад ранняй аптымізацыяй.

Сучасныя JVM могуць аптымізаваць ланцужок радкоў з "+" і пераўтварыць яго ў StringBuilder. Паколькі вы бачыце, як доўга будзе атрыманая радок, вы можаце прызначыць StringBuilder патрэбны памер у самым пачатку. Калі вы самі створыце StringBuilder, выкарыстоўваючы стандартны памер масіва, масіў char можа спатрэбіцца павялічыць потым. Для гэтага патрэбна копія масіва і можа быць павольней.

З моманту Java 9, узгадненне радкоў было значна аптымізавана, стратэгія вызначалася падчас выканання.

Калі вы некалькі разоў дадаеце радок у цыкле, вы, верагодна, не можаце памыліцца з StringBuilder, але прысвоіць патрэбны памер загадзя, калі ведаюць. Прытрымвайцеся "+" па-за завес, калі гэта прасцей для чытання. і давярайце JVM для аптымізацыі лепш за вас.