Другое событие 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));
}
Internet Explorer является единственным браузером, который действительно страдает от этого в современном мире. (Версии 5, 6, и 7 были медленной собакой. 8 не показывает ту же неисправность.), Кроме того, IE становится медленнее и медленнее, дольше Ваша строка.
, Если у Вас есть длинные строки для конкатенации тогда определенно, используют array.join технику. (Или некоторая обертка StringBuffer вокруг этого, для удобочитаемости.), Но если Ваши строки коротки, не беспокоятся.
Вашим примером не является хороший, в котором очень маловероятно, что производительность будет signficantly отличающийся. В Вашем примере удобочитаемость должна превзойти производительность, потому что увеличение производительности одного по сравнению с другим незначительно. Преимущества массива (StringBuffer) только очевидны при выполнении многих concatentations. Даже тогда Ваш пробег может очень в зависимости от Вашего браузера.
Вот подробный анализ производительности, который показывает производительность с помощью всех различных методов конкатенации JavaScript через многие различные браузеры; Строковая Производительность Анализ
[еще 117]:
Да это верно, но Вы не должны заботиться. Пойдите с тем, который это легче считать. Если необходимо сравнить приложения, затем сфокусироваться на узких местах.
я предположил бы, что конкатенация строк не будет Вашим узким местом.
Согласованный с Michael Haren .
Также рассматривают использование массивов и соединения, если производительность является действительно проблемой.
var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));
Попробуйте это:
var s = ["<a href='", url, "'>click here</a>"].join("");
JavaScript не сделал, чтобы собственный StringBuffer возразил, таким образом, я предполагаю, что это из библиотеки, которой Вы пользуетесь, или функция необычной серверной среды (т.е. не браузер).
я сомневаюсь, что библиотека (записанный в JS) произвела бы что-либо быстрее, хотя собственный объект StringBuffer мог бы. Категорический ответ может быть найден с профилировщиком (если Вы будете работать в браузере тогда, то Firebug предоставит Вам профилировщика для механизма JS, найденного в Firefox).
Как уже некоторые пользователи отметили: Это не важно для маленьких строк.
И новые механизмы JavaScript в Firefox, Safari или Google Chrome оптимизируют так
"<a href='" + url + "'>click here</a>";
, с такой скоростью, как
["<a href='", url, "'>click here</a>"].join("");
В словах Knuth, "преждевременная оптимизация является корнем всего зла!" Маленькая отсрочка так или иначе не будет, скорее всего, иметь большую часть эффекта в конце; я выбрал бы более читаемый.
Как далеко я знаю, каждая конкатенация подразумевает перераспределение памяти. Таким образом, проблемой не является оператор, используемый, чтобы сделать это, решение состоит в том, чтобы сократить количество конкатенаций. Например, сделайте конкатенации за пределами итеративных структур, когда Вы будете мочь.
Да, согласно обычным сравнительным тестам. НАПРИМЕР: http://mckoss.com/jscript/SpeedTrial.htm .
, Но для маленьких строк, это не важно. Вы будете только заботиться о действиях на очень больших строках. Кроме того, в большей части сценария JS горлышко бутылки редко находится на обработках строк, так как существует недостаточно его.
необходимо следить за управлением DOM.