@go2goj

Объекты, имеющие поля сложных типов (Immutable или нет)?

1. Объекты, имеющие (своё состояние) ссылочные fianl поля, которые ведут к изменяемым объектам – являются неизменяемыми?
public class Solution {
	final abc object = new abc();
}

class abc {
	int a = 5;
}

//Объект класса Solution – Immutable?

2. Объекты, имеющие (своё состояние) ссылочные поля без final, которые ведут к неизменяемым объектам – являются неизменяемыми?
public class Solution {
	abc object = new abc();
}

class abc {
	final int a = 5;
}

//Объект класса Solution – Immutable?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Vamp
@Vamp
В состояние объекта входит состояние объектов сложных типов. С формальной точки зрения объекты обоих ваших классов являются изменяемыми. Однако в JVM существует понятие effectively final - это мутабельный объект, состояние которого не изменяется, хоть и не форсируется модификаторами private и final. Если JVM поймёт, что конкретный объект вашего класса не меняется (другими словами, является effectively final), то к этому объекту могут применяться оптимизации, характерные для неизменяемых объектов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы