Если вы не хотите, чтобы объекты, переданные в качестве параметров, были изменены, передайте копию (или сделайте копию параметра внутри метода).
Обратите внимание, что char[][]
означает, что у вас есть массив массивов символов, то есть вы работаете с объектами, и если вы копируете первый уровень, у вас все равно может быть ссылка на второй.
Таким образом, вам, возможно, придется перебрать первый уровень / измерение и скопировать все массивы, как здесь:
char target[][] = new char[state.length][0];
for( int i = 0; i < state.length; ++i ) {
target[i] = Arrays.copyOf(state[i], state[i].length);
}