== 1. new ArrayList<>(list) and List.copyOf share the elements == boxes = [Box(100), Box(2)] viaCtor = [Box(100), Box(2)] viaCopyOf = [Box(100), Box(2)] after boxes.add(Box(3)): viaCtor.size() = 2 == 2. The deep version needs the element copy, so a stream or a loop == boxes = [Box(-1), Box(2), Box(3)] deep = [Box(100), Box(2), Box(3)] == 3. HashMap copy constructor: new map, same values == mCopy.get("k") = Box(55) == 4. 1-D primitive arrays: clone / copyOf are true copies == a = [99, 2, 3], clone = [1, 2, 3], copyOf = [1, 2, 3] == 5. 2-D arrays: the rows are shared == grid = [[99, 2], [3, 4]] shallow = [[99, 2], [3, 4]] deepGrid = [[1, 2], [3, 4]] == 6. Object arrays: copyOf copies references, not objects == arrCopy[0] = Box(77), same object: true