Наиболее эффективное использование подстроки () - PullRequest
1 голос
/ 11 октября 2011

Просто интересно узнать, какой из двух приведенных ниже фрагментов наиболее эффективен?

String outStr = inputStr.substring(20);

(или)

String outStr = inputStr.substring(20, inputStr.length());

Вызывает ли первый фрагмент внутренний вызов inputStr.length () в случае отсутствия второго аргумента?

Ответы [ 4 ]

2 голосов
/ 11 октября 2011

Не совсем - он вызывает substring(beginIndex, count), где count - внутреннее поле, содержащее количество символов. length() также возвращает count, однако, это вызов метода +1. Практически то же самое.

Но предпочитаю версию с одним аргументом - читать чище.

1 голос
/ 11 октября 2011

Мой совет состоит в том, чтобы каждый из этих циклических циклов повторять и измерять, сколько времени они занимают.

Если кто-то заметно быстрее, сделайте это.

Если вы обнаружите, что разница незначительна, оптимизируйте ее для удобства чтения (первая).

Мера, не угадай! Это правило номер один оптимизации.

0 голосов
/ 11 октября 2011

Если вы посмотрите исходный код для класса java.lang.String, который вы можете найти в файле src.zip в вашем каталоге установки JDK, вы найдете следующие реализации (это из обновления 26 JDK 6):

public String substring(int beginIndex) {
    return substring(beginIndex, count);
}

public int length() {
    return count;
}

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

0 голосов
/ 11 октября 2011

Первый код, звонки String.substring(int beginIndex, int endIndex) внутри.

Код:

public String substring(int beginIndex) {
    return substring(beginIndex, count);
    }

Где count равно

Количество - это количество символов в строке.

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