Java вектор вопрос - PullRequest
       6

Java вектор вопрос

0 голосов
/ 16 сентября 2010

Является ли элемент в Vector клоном / копией оригинала?

SomeType myVar = new SomeType();
myVar.something = "AStringValue";
myVar.i = 123;

Vector<SomeType> v1 = new Vector<SomeType>();
v1.add(myVar);
Vector<SomeType> v2 = new Vector<SomeType>();
v2.add(myVar);

v1.get(0).i = 321;

После этого кода эти утверждения верны v2.get(0).i == 321, myVar.i == 321?

Ответы [ 2 ]

5 голосов
/ 16 сентября 2010

Нет, Vector содержит ссылку на исходный объект - как и ваша переменная myVar. Очень важно понимать, что переменная (или даже любое выражение) может никогда на самом деле не иметь значения, которое является объектом. Значением является либо значение типа примитива (целое число, символ и т. Д.), Либо ссылка на объект, либо значение NULL.

Когда вы вызываете v1.add(myVar), это копирует значение myVar в вектор ... это значение является ссылкой. Когда вы изменяете объект, на который ссылается ссылка, это изменение будет видно через все ссылки на объект.

Думайте об этом так: предположим, у меня есть дом с красной дверью, и дайте мой адрес двум разным людям. Первый человек приходит и красит мою дверь в зеленый цвет. Если второй человек придет и осмотрит дом, он увидит, что дверь тоже зеленая ... потому что он смотрит на тот же дом через копию ссылки (адрес в данном случае).

(Кроме того, есть ли какая-то причина, по которой вы все еще используете Vector вместо более распространенного ArrayList? )

1 голос
/ 16 сентября 2010

Это не клон, это ссылка на тот же объект.Если вы обновите тот, который вы получили от вектора, вы обновите тот, который вы поместили в оба вектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...