Java-да «+» операторы мен StringBuilder-ді пайдаланудың арасындағы айырмашылық бар ма?


жауап 1:

Java-да «+» операторы мен StringBuilder-ді пайдаланудың арасындағы айырмашылық бар ма?

Бір жолда мынандай:

String1 = «бір» + «екі»; String string2 = жаңа StringBuilder («бір»). Қосу («екі»). ToString ();

Орындалуда ешқандай айырмашылық болмауы керек. Шын мәнінде, қазіргі Java экожүйелерінде біріншісі компиляция кезінде екіншісіне оңтайландырылған. Мұны іс-әрекетте көру үшін, өзіңіздің қалаған түзетушіңізден бастаңыз.

Алайда, егер сіз жеке жолдарда немесе, мысалы, циклде жолдарды байланыстырсаңыз:

1-жол = = «»; StringBuilder sb = жаңа StringBuilder (); for (integer i = 0; i <5; i ++) {string1 = string1 + i.toString (); sb.append (i.toString ()); } String2 = sb.toString ();

Содан кейін StringBuilder пайдалану тиімдірек, ал кейде күрделі жолды құрудың қолайлы әдісі қолданылады. Менің білуімше, қазіргі уақытта ешқандай Java құрастырушысы StringBuilder-де + қайталануды оңтайландырмайды.


жауап 2:

Қысқаша жауап: Бұл болуы мүмкін, бірақ көбіне бұл туралы ойланудың қажеті жоқ. Ертерек оңтайландырудан гөрі нақты кодты таңдаңыз.

Қазіргі заманғы JVM модельдері «+» көмегімен жолды байланыстыруды оңтайландырады және оны StringBuilder түрлендіреді. Алынған жол қанша уақытқа созылатындығын көре алатындықтан, басында StringBuilder-ге дұрыс өлшемді тағайындауға болады. Егер сіз әдепкі массив өлшемін пайдаланып StringBuilder жасасаңыз, онда кейінірек массивті үлкейту қажет болуы мүмкін. Бұл массив көшірмесін қажет етеді және баяу болуы мүмкін.

Java 9-ден бастап, стратегияларды жұмыс уақытында орнату арқылы қатарларды біріктіру айтарлықтай оңтайландырылды.

Егер сіз жолды циклге бірнеше рет қосатын болсаңыз, онда StringBuilder бағдарламасында қате кете алмайтын шығарсыз, бірақ егер қажет болса, дұрыс өлшемді алдын-ала тағайындаңыз. Егер оқу оңай болса, ілмектерден тыс «+» белгісін қойыңыз. сізден жақсырақ оңтайландыру үшін JVM-ге сеніңіз.