Поскольку вы указали класс, другой класс в том же пакете может изменить эти значения.Этот класс не является неизменным.
Теперь, если бы вы сделали что-то вроде
class Zoo
{
protected final String bearName;
protected final Double trainerSalary;
protected final Integer monkeyCount;
}
, тогда класс был бы неизменным.Если логика вашей программы рассматривает этот класс как неизменяемый, то почему бы не сделать его фактически неизменным?
Кроме того, если несколько потоков проверяют и обновляют одно и то же значение, это может вызвать проблемы.Скажем, несколько потоков проверяли и обновляли monkeyCount, тогда есть большая вероятность, что monkeyCount окажется неверным, потому что нет ничего, что заставляло бы эти проверки и обновления происходить атомарно.