+ оператор, менее производительный, чем StringBuffer.append ()

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

90
задан Dónal 1 March 2017 в 11:50
поделиться

10 ответов

Internet Explorer является единственным браузером, который действительно страдает от этого в современном мире. (Версии 5, 6, и 7 были медленной собакой. 8 не показывает ту же неисправность.), Кроме того, IE становится медленнее и медленнее, дольше Ваша строка.

, Если у Вас есть длинные строки для конкатенации тогда определенно, используют array.join технику. (Или некоторая обертка StringBuffer вокруг этого, для удобочитаемости.), Но если Ваши строки коротки, не беспокоятся.

46
ответ дан user710437 24 November 2019 в 06:56
поделиться

Вашим примером не является хороший, в котором очень маловероятно, что производительность будет signficantly отличающийся. В Вашем примере удобочитаемость должна превзойти производительность, потому что увеличение производительности одного по сравнению с другим незначительно. Преимущества массива (StringBuffer) только очевидны при выполнении многих concatentations. Даже тогда Ваш пробег может очень в зависимости от Вашего браузера.

Вот подробный анализ производительности, который показывает производительность с помощью всех различных методов конкатенации JavaScript через многие различные браузеры; Строковая Производительность Анализ

join() once, concat() once, join() for, += for, concat() for

[еще 117]:
Ajaxian>> Строковая Производительность в IE: Array.join по сравнению с + = продолжался

102
ответ дан Jeremy Banks 24 November 2019 в 06:56
поделиться

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

я предположил бы, что конкатенация строк не будет Вашим узким местом.

37
ответ дан Michael Haren 24 November 2019 в 06:56
поделиться

Согласованный с Michael Haren .

Также рассматривают использование массивов и соединения, если производительность является действительно проблемой.

var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));
31
ответ дан Community 24 November 2019 в 06:56
поделиться

Попробуйте это:

var s = ["<a href='", url, "'>click here</a>"].join("");
18
ответ дан Rahul 24 November 2019 в 06:56
поделиться

JavaScript не сделал, чтобы собственный StringBuffer возразил, таким образом, я предполагаю, что это из библиотеки, которой Вы пользуетесь, или функция необычной серверной среды (т.е. не браузер).

я сомневаюсь, что библиотека (записанный в JS) произвела бы что-либо быстрее, хотя собственный объект StringBuffer мог бы. Категорический ответ может быть найден с профилировщиком (если Вы будете работать в браузере тогда, то Firebug предоставит Вам профилировщика для механизма JS, найденного в Firefox).

8
ответ дан Quentin 24 November 2019 в 06:56
поделиться

Как уже некоторые пользователи отметили: Это не важно для маленьких строк.

И новые механизмы JavaScript в Firefox, Safari или Google Chrome оптимизируют так

"<a href='" + url + "'>click here</a>";

, с такой скоростью, как

["<a href='", url, "'>click here</a>"].join("");
7
ответ дан amix 24 November 2019 в 06:56
поделиться

В словах Knuth, "преждевременная оптимизация является корнем всего зла!" Маленькая отсрочка так или иначе не будет, скорее всего, иметь большую часть эффекта в конце; я выбрал бы более читаемый.

6
ответ дан William Keller 24 November 2019 в 06:56
поделиться

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

1
ответ дан David Ameller 24 November 2019 в 06:56
поделиться

Да, согласно обычным сравнительным тестам. НАПРИМЕР: http://mckoss.com/jscript/SpeedTrial.htm .

, Но для маленьких строк, это не важно. Вы будете только заботиться о действиях на очень больших строках. Кроме того, в большей части сценария JS горлышко бутылки редко находится на обработках строк, так как существует недостаточно его.

необходимо следить за управлением DOM.

0
ответ дан e-satis 24 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: