Это неизменяемая строка (не может быть изменена или изменена), а не иммунная, хотя я полагаю, вы можете утверждать, что она не подвержена изменениям: -)
Это означает, что вы не можете изменить саму базовую строку, вы можете только присвоить переменной другую строку. Итак:
string a = "Hello";
a = "Goodbye";
не изменяет память, в которой хранится "Hello"
, оно меняет a
, указывая на другое место в памяти, где хранится "Goodbye"
.
Это позволяет Java обмениваться строками для повышения эффективности. Вы даже можете получить случаи, когда строки, такие как "deoxyribonucleic acid"
и "acid"
, могут совместно использовать пространство, где последние указывают на определенное место в первом. Опять же, это стало возможным благодаря неизменности таких строк.
В любом случае, ==
проверит, ссылаются ли строки на один и тот же базовый объект, а не на то, что часто бывает полезным. Если вы хотите увидеть, равны ли строки, вы должны использовать String.equals()
или один из его вариантов.