Як зазначалося вище, немодифікується не є незмінним, оскільки немодифікується колекція може бути змінена, якщо, наприклад, немодифікована колекція має базовий делегатський набір, на який посилається якийсь інший об'єкт, і цей об'єкт змінює його.
Щодо непорушного, він навіть не добре визначений. Однак загалом це означає, що об'єкт "не зміниться", але це потрібно визначити рекурсивно. Наприклад, я можу визначити незмінні для класів, чиї змінні екземпляри є усі примітиви, чиї методи не містять аргументів і повертають примітиви. Потім методи рекурсивно дозволяють змінним екземплярам бути незмінними, а всі методи містити аргументи, незмінні та повертають незмінні значення. Методи повинні гарантувати повернення однакового значення з часом.
Якщо припустити, що ми можемо це зробити, існує також безпечна концепція. І вас можуть привести до думки, що незмінна (або не змінна з часом) також передбачає безпеку нитки. Однак це не такі це головний момент, який я тут зазначаю, що ще не було відзначено в інших відповідях. Я можу створити незмінний об’єкт, який завжди повертає однакові результати, але не є безпечним для потоків. Щоб побачити це, припустимо, що я будую незмінну колекцію, підтримуючи доповнення та видалення з часом. Тепер незмінна колекція повертає свої елементи, дивлячись на внутрішню колекцію (яка може змінюватися з часом), а потім (внутрішньо) додавати та видаляти елементи, які були додані чи видалені після створення колекції. Зрозуміло, що хоча колекція завжди повертає однакові елементи, вона не є безпечною для нитки лише тому, що вона ніколи не змінить значення.
Тепер ми можемо визначити незмінних об'єктів як безпечні для потоків і ніколи не змінюватимуться. Існують вказівки щодо створення непорушних класів, які, як правило, призводять до таких класів, проте майте на увазі, що можуть бути способи створення непорушних класів, які потребують уваги до безпеки потоку, наприклад, як описано у прикладі збірки "знімок" вище.