A ka ndonjë ndryshim në performancën midis përdorimit të operatorit "+" dhe StringBuilder në Java?


përgjigje 1:

A ka ndonjë ndryshim në performancën midis përdorimit të operatorit "+" dhe StringBuilder në Java?

Në një rresht të vetëm si kjo:

String string1 = "një" + "dy"; String string2 = StringBuilder i ri ("një"). Shtoj ((dy)). ToString ();

Nuk duhet të ketë ndryshim në performancën. Në fakt, në ekosistemet moderne Java, e para është optimizuar për të dytën në kohën e përpilimit. Për ta parë këtë në veprim, provoni të filloni me debuggerin tuaj të preferuar.

Sidoqoftë, nëse bashkoni telat në linja të veçanta ose, për shembull, në një lak për:

String string1 = ""; StringBuilder sb = StringBuilder i ri (); for (Interesi i = 0; i <5; i ++) {string1 = string1 + i.toString (); sb.append (i.toString ()); Str String string2 = sb.toString ();

Pastaj përdorimi i një StringBuilder është më "efikas" dhe nganjëherë metoda e preferuar për të krijuar një tel më komplekse. Me sa di, asnjë përpilues i Java aktualizon optimizimin e përsëritjes së + në StringBuilder.


përgjigje 2:

Përgjigje e shkurtër: Mund të jetë, por shumicën e kohës nuk ia vlen të shqetësohesh. Preferoni kod të qartë mbi optimizimin e hershëm.

JVM-të moderne mund të optimizojnë bashkimin e vargjeve me "+" dhe ta shndërrojnë atë në një StringBuilder. Meqenëse mund të shihni se sa do të jetë vargu që rezulton, mund të caktoni madhësinë e saktë në StringBuilder në fillim. Nëse krijoni një StringBuilder vetë duke përdorur madhësinë e paracaktuar të grupit, grupi i karrierës mund të duhet të zgjerohet më vonë. Kjo kërkon një kopje të grupit dhe mund të jetë më e ngadaltë.

Që nga Java 9, bashkimi i telave është optimizuar në mënyrë të konsiderueshme, me strategjinë që është vendosur në kohën e funksionimit.

Nëse shtoni vazhdimisht në një tel në një lak, ju me siguri nuk mund të gaboni me një StringBuilder, por caktoni madhësinë e saktë paraprakisht nëse dihet. Ngjitni "+" jashtë sytheve nëse kjo është më e lehtë për tu lexuar. dhe besoni JVM për të optimizuar më mirë se ju.