Поскольку тип enum представляет собой набор именованных значений, я хочу использовать его в качестве состояний конечного автомата.
Однако, когда я назначаю один экземпляр enum другому и изменяю значение предыдущего экземпляра, я ожидаю, что другой экземпляр enum имеет ту же ссылку, но это не так, и, как результат, изменение значенияне вступает в силу с другой (более поздней).
Мне интересно, почему?и как я могу реализовать эту логику с помощью типа enum?
Вот мой пример кода.
public class Test {
public enum TestEnum {
A, B, C
}
public static class InnerClass {
private String str;
private int i;
private Integer integer;
private InnerClass(String s, int i, Integer integer) {
this.str = s;
this.i = i;
this.integer = integer;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int getInteger() {
return integer;
}
public void setInteger(Integer i) {
this.integer = i;
}
@Override
public String toString() {
return "str: " + str + ", i: " + i + ", integer: " + integer;
}
}
public static void main(String[] args) {
InnerClass innerClass = new InnerClass("test string", 1, 1);
TestEnum enum1 = TestEnum.A;
System.out.println(innerClass.toString());
System.out.println(enum1);
InnerClass innerClass2 = innerClass;
TestEnum enum2 = enum1;
innerClass.setStr("new test string");
innerClass.setI(2);
innerClass.setInteger(2);
enum1 = TestEnum.B;
System.out.println(innerClass2.toString());
System.out.println(enum2);
System.out.println(enum1);
}
}
И вывод:
str: test string, i: 1, целое число: 1
A
str: новая тестовая строка, i: 2, целое число: 2
A
B
Очевидно, вы можете видеть, что изменение enum1 не влияетперечислить2.Зачем?и если я хочу, чтобы это произошло, как я могу изменить свой код?