Просто для усиления предыдущих комментариев:
При просмотре источника delete
() всегда вызывает System.arraycopy
(), но если аргументы (0, количество), он будет вызывать arraycopy
() с нулевой длиной, которая, вероятно, не будет иметь никакого эффекта.ИМХО, это должно быть оптимизировано, так как я держу пари, что это самый распространенный случай, но неважно.
С setLength
(), с другой стороны, вызов увеличит емкость StringBuilder, если это необходимо, посредством вызовав ensureCapacityInternal
() (еще один очень распространенный случай, который должен был быть оптимизирован из IMHO), а затем усекает длину, как delete
().
В конечном итоге оба метода просто заканчивают настройку count
до нуля.
Ни один из вызовов не выполняет итерации в этом случае.Оба делают ненужный вызов функции.Однако sureCapacityInternal () - это очень простой закрытый метод, который предлагает компилятору почти полностью оптимизировать его, поэтому вполне вероятно, что setLength
() немного более эффективен.
Я крайне скептически отношусь к созданиюНовый экземпляр StringBuilder может быть настолько же эффективным, как просто установка count
на ноль, но я полагаю, что компилятор может распознать задействованный шаблон и преобразовать повторяющиеся экземпляры в повторяющиеся вызовы в setLength
(0),Но в лучшем случае это будет стирка.И вы зависите от компилятора, который распознает регистр.
Резюме: setLength (0) является наиболее эффективным.Для максимальной эффективности предварительно выделите буферное пространство в StringBuilder при его создании.