int[][] array = new int[][] {...}
int[][] clone = array.clone();
Я наивно ожидал, что это сработает. Но он этого не сделал - он клонировал только первое измерение, и мне пришлось идти и клонировать другое измерение вручную, если бы я хотел использовать настоящий клон. Примечание: содержимое было правильно скопировано. Но когда я изменил clone[0][1]
, он отразился на array[0][1]
И хотя .clone()
, как известно, выполняет мелкий клон, int[][]
выглядит как один объект (если мы не знаем его внутренней реализации, по крайней мере)
Почему это поведение выбрано? Не int[][]
ссылается на объект массива, а не только на первое измерение массива? И в каких сценариях клонируется только первое измерение желаемого поведения?