Рассмотрим следующий фрагмент кода Java:Будет ли компилятор Java оптимизировать String.length() в состоянии for-loop?
String buffer = "...";
for (int i = 0; i < buffer.length(); i++)
{
System.out.println(buffer.charAt(i));
}
Поскольку String
является непреложным и buffer
не переназначен в цикле, будет компилятор Java должен быть достаточно умны, чтобы оптимизировать прочь buffer.length()
вызов в для условия цикла в? Например, испустит ли он байт-код, эквивалентный следующему, где buffer.length()
назначается переменной, и эта переменная используется в условии цикла? Я читал, что некоторые языки, такие как C#, делают этот тип оптимизации.
String buffer = "...";
int length = buffer.length();
for (int i = 0; i < length; i++)
{
System.out.println(buffer.charAt(i));
}
Что относительно действительно длинных строк, скажем, несколько 1000K? – Drejc
Что такое «дрожь»? – stackoverflowuser2010
Это 'O (1)' стоимость, так что это не имеет значения.Строка хранится как '{length = 1000, character data = {0x65, ... 0x65}}'. – Mitch