a) Представьте себе объект StringPool, не делая строку неизменной, это вообще невозможно, потому что в случае пула строк один строковый объект / литерал, например. На «Test» ссылаются многие ссылочные переменные, поэтому, если какая-либо из них изменит значение, на которое будут автоматически влиять другие, то есть, скажем,
Строка A = "Тест" и Строка B = "Тест"
Теперь строка B называется «Test» .toUpperCase (), которая заменяет тот же объект на «TEST», поэтому A также будет «TEST», что нежелательно.
б) Еще одна причина того, почему String является неизменяемой в Java, заключается в том, что String может кэшировать свой хэш-код, поскольку String в Java кэширует свой хэш-код и не вычисляет каждый раз, когда мы вызываем метод String для хэш-кода, что делает его очень быстрым в качестве ключа hashmap. .