Из того, что я знаю, объект clone()
создает новую копию клонированного объекта. В моем случае я пытаюсь клонировать матрицу Symbol
(что является простым enum
). this.table
- это оригинальный объект, а t
- это клон. Когда я напишу новое значение в ячейке t
, я бы ожидал, что this.table
останется без изменений. Однако это не так, и второйassert
не работает. (Я добавил первое утверждение только для обеспечения правильности второго).Object clone() в Java: почему это утверждение терпит неудачу?
Вот код:
@Override
public State applyAction(Action action) {
int x = ((TickAction)action).x;
int y = ((TickAction)action).y;
Symbol[][] t = this.table.clone();
assert this.table[x][y] != currentPlayer.getSymbol();
t[x][y] = currentPlayer.getSymbol();
assert t[x][y] != this.table[x][y] ;
TableState ts = new TableState(t,this.currentPlayer.getNextPlayer());
ts.setLastAction(action);
return ts;
}
Примечание: с отладчиком я проверил, что t
и this.table
на самом деле имеют разные id
, однако после второй проверки, я заметил, что, несмотря на это, их отдельные клетки имеют одинаковый id
, Тогда я очень смущен этим. Может ли кто-нибудь объяснить мне, что происходит?
Вам даже не нужен obfuscater! : p – Chiron
Попробуйте добавить 'assert t! = this.table;', поскольку они должны быть разными объектами. – ericbn