В вашем контексте .slice()
просто делает копию вашего вектора, так что newArray
относится к другому объекту из oldArray
, за исключением того, что оба выглядят как идентичные объекты. Точно так же идет для newVector
и oldVector
.
Второй фрагмент:
Array newArray = oldArray;
Vector.<Foo> newVector = oldVector;
фактически делает newArray
ссылкой на oldArray
. Это означает, что обе переменные ссылаются на один и тот же массив. То же самое для newVector
и oldVector
- оба в конечном итоге ссылаются на один и тот же вектор. Думайте об этом, как об использовании резинового штампа для двухкратной печати одной и той же печати на разных листах бумаги: это одна и та же печать, только что изображенная на двух листах бумаги.
С другой стороны, термин мелкая копия отличается от глубокой копии тем, что мелкой является копия только объекта , тогда как глубокой является копия объект и все его свойства .
Кроме того, что, если базовый тип вектора не Foo, а что-то простое и неизменное, например, int?
То же самое, потому что ваши переменные ссылаются на объекты Vector
, а не на их int
s.
Каков результат следующего?
Ваш вывод правильный:
something, something else, and another thing
something, something else, and the last thing
two = one.slice()
без каких-либо аргументов создает новую копию one
со всем ее текущим содержимым и присваивает ее two
. Когда вы нажимаете каждый третий элемент на one
и two
, вы добавляете к отдельным Vector
объектам.