Вопрос, связанный с соображениями производительности для String.substring
. До Java 1.7.0_06 метод String.substring()
возвратил новый объект String
, который поделился с тем же базовым массивом char, что и его родители, но с разными смещениями и длиной. Чтобы избежать хранения очень большой строки в памяти, когда требуется только небольшая подстрока, программисты использовали для написания кода следующим образом:
s = new String(queryReturningHugeHugeString().substring(0,3));
Начиная с версии 1.7.0_06, нет необходимости создавать новый String
, потому что в реализации Oracle String
подстроки больше не разделяют свой базовый массив char.
Мой вопрос: можем ли мы полагаться на Oracle (и другие вендоры), не возвращаясь к char[]
совместному использованию в какой-то будущей версии, и просто делаем s = s.substr(...)
, или мы должны явно создавать новую строку на всякий случай релиз JRE снова начинается с реализации совместного использования?