EnumType.values()
возвращает копию всех констант enum, поэтому, даже если вы измените массив, возвращенный values()
, это не повлияет на другие потоки.
Байт-код подтверждает это:
public static values()[Lcom/example/EnumType;
L0
LINENUMBER 43 L0
GETSTATIC com/example/EnumType.$VALUES : [Lcom/example/EnumType;
INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;
CHECKCAST [Lcom/example/EnumType;
ARETURN
MAXSTACK = 1
MAXLOCALS = 0
Линия:
INVOKEVIRTUAL [Lcom/example/EnumType;.clone ()Ljava/lang/Object;
Вызывает метод Array.clone()
, который возвращает поверхностную копию массива