int[][] array = new int[][] {...}
int[][] clone = array.clone();
私は素朴にこれがうまくいくと思っていました。しかし、そうではありませんでした。最初の次元のみが複製されました。真の複製が必要な場合は、他の次元を手動で複製する必要がありました。注: 内容は適切にコピーされました。しかし、私が変更したときclone[0][1]
、それはに反映されましたarray[0][1]
そして.clone()
、浅いクローンを実行することが知られていますint[][]
が、単一のオブジェクトのように見えます (少なくともその内部実装がわからない場合)
なぜその行動が選ばれるのですか?int[][]
配列の最初の次元だけでなく、配列オブジェクトを参照していませんか? また、最初の次元のみを複製すると、どのようなシナリオで望ましい動作が得られるのでしょうか?