На это есть две причины. Во-первых, это позволяет
гарантировать, что некий класс является синглтоном (статья 2). Во-вторых, это дает возможность
убедиться в том, что у неизменяемого класса не появилось двух одинаковых экземпляров: a.equals(b)
тогда и только тогда, когда а==Ь. Если класс предоставляет' такую гарантию, его клиенты могут
использовать оператор == вместо метода equals(Object), что приводит к существенному повышению
производительности программы. Подобную оптимизацию реализует шаблон перечисления типов,