Что мне приходит в голову, так это интернирование строк - литералы, все, что находится в пуле констант, и все, что вручную intern()
ed указывает на один и тот же строковый объект.Если вы начнете возиться с содержимым интернализованного строкового литерала, вы вполне можете увидеть те же самые изменения во всех других литералах, использующих один и тот же базовый объект.
Я не уверен, происходит ли вышеупомянутое на самом деле, так какЯ никогда не пытался (теоретически так и будет, я не знаю, случится ли что-то на сцене, чтобы остановить это, но я сомневаюсь в этом), но такие вещи могут вызвать потенциальные проблемы.Конечно, это может также вызвать проблемы на уровне Java, просто передавая несколько ссылок на одну и ту же строку, а затем используя атаку отражения, чтобы изменить объект из одной из ссылок.Большинство людей (включая меня!) Не будут явно защищаться от подобных вещей в коде, поэтому использование этой атаки с любым кодом, который не является вашим собственным, или вашим собственным кодом, если вы тоже не защитились от этого, может вызвать все видыстранных, ужасных ошибок.
Теоретически это интересная область, но чем больше ты копаешься вокруг, тем больше понимаешь, почему что-то в этом духе - плохая идея!
Если говорить вне строки, естьникаких улучшений производительности, о которых я знаю, для объекта, который является неизменяемым (на самом деле, я не думаю, что JVM может даже сказать в данный момент, является ли объект неизменным, отражая атаки в сторону.) Он может выбросить такие вещи, как checker-framework выключено или все, что пытается статически проанализировать код, чтобы гарантировать его неизменность.