Оператор Concat over '+' для конкатенации строк - PullRequest
1 голос
/ 07 декабря 2009
String today = someSimpleDateFormat.format(new Date());
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
int minute = rightNow.get(Calendar.MINUTE);
String hourString = String.valueOf(hour);
String minuteString = String.valueOf(minute);

if(hourString.length() == 1){
    hourString = '0'.concat(hourString);
}

if(minuteString.length() == 1){
    minuteString = '0'.concat(minuteString);
}

String dayHourMinute = today.concat("_").concat(hourString).concat("_").concat(minuteString);       

Я мог бы использовать оператор «+». Будут ли проблемы с производительностью, если в программе много конкатенации строк и я использую оператор «+» вместо метода «concat» или наоборот?

Ответы [ 4 ]

14 голосов
/ 07 декабря 2009

В любом случае вы будете создавать множество ненужных временных String с. Настоятельно рекомендуем использовать StringBuilder. Компилятор будет фактически использовать временные StringBuilder экземпляры, когда вы используете оператор +, но у него нет более широкого представления о том, чего вы пытаетесь достичь, и он ограничен с точки зрения того, насколько он может оптимизировать * 1007. * используйте, так что вы почти всегда будете делать лучше, делая это явным.

4 голосов
/ 07 декабря 2009

Если у вас нет проблем с производительностью, рассмотрите следующую альтернативу, которую мне легче читать:

String dayHourMinute = 
     String.format("%s_%s_%s", today, hourString, minuteString);
String evenBetter = 
     String.format("%s_%02d_%02d", today, hourString, minuteString);
// thanks to hardcoded!
4 голосов
/ 07 декабря 2009

Это не имеет значения:

Да, вам следует избегать очевидного начинающие ошибки строки конкатенация, материал каждый программист учится на первом курсе работа. Но после этого вы должны быть больше беспокоит ремонтопригодность и читаемость вашего кода, чем его спектакль. И это, возможно, самая трагическая вещь о сдаче себя засосать Театр микрооптимизации - это отвлекает вас от вашей настоящей цели: написание лучшего кода.

4 голосов
/ 07 декабря 2009

Я думаю, что оба более или менее эквивалентны. Однако, если вас беспокоит производительность, вы должны использовать StringBuilder для конкатенации строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...