Что такое mutable и immutable типы? Что даёт классу String то, что его сделали immutable? ​

Immutable (неизменным) типом в ООП называется такой тип, объект которого после создания становиться неизменным, так сказать read-only. Соответственно mutable(изменчивые) типы готовы к изменениям на всём протяжении своего существования. Immutable тип, например String, не содержит методов для изменения своего состояния. Все методы, которые якобы изменяют состояние объекта String, на самом деле возвращают новые строки. Плюсы неизменности строк следующие:
-так как строки неизменны, их стало возможно использовать в пуле, тем самым добиться экономии памяти

...
   String s1 = "HELLO";
   String s2 = "HELLO";
...

s1 и s2 указывают на одну и ту же строку.
-возможность кэширования хэш-кода. Мы всегда можем быть уверены что хэш-код строки не изменился.
-безопасность. Подключения к базам, соединения, аргументы методов. Строки везде.
-потокобезопасность. Методы, обращающиеся из разных потоков к общей строке всегда видят одно и то же её состояние.

Понравилась статья? Поделиться с друзьями:

Комментарии:

Комментарии: 3
  1. Саша

    А как другие потоки могут быть уверены в том, что строка не изменится? Строка сама по себе, то есть просто набор символов, никому не нужна, к ней нужно обращаться, значит это строка должна храниться в переменной. Ну, переменная хранит ссылку на строку. Значит потоки будут просить доступ не к самой строке, а к переменной, ссылающейся на строку, но вы сами написали, что у переменной (объекта строки) есть методы, позволяющие её «изменить», то есть создать новый объект строки и ссылаться теперь на неё. Получается, что хоть и строки неизменны, но нам то нужны к переменным (объектам) типа строк, которые могут меняться

    1. Andrewuse

      String s1 = «HELLO»;
      String s2 = «HELLO»;
      String s3 = «HELLO»;

      s3 = s2 = s1
      Вот примерная схема
      s2 ссылается на s1
      s3 cсылается на s2 которая = s1
      так как они все содержат один и тот же хэш код в памяти…поэтому нет смысла занимать разные участки памяти одинаковой строкой..
      s3 = s1
      s2 = s1

  2. Andrewuse

    String s1 = «HELLO»;
    String s2 = «HELLO»;
    String s3 = «HELLO»;

    s3 = s2 = s1

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: