#java
#java
Вопрос:
У меня проблема с одним классом в java
этот класс является общедоступным и расширяет DefaultHandler, все методы этого класса также являются общедоступными… но переменные являются частными…
Моя проблема в том, что если я скопирую значение в другую переменную и изменю эту вторую переменную, первая тоже изменится.
похоже на статические переменные.. но они не являются статическими … есть идеи!!!
заранее спасибо
Комментарии:
1. Так загадочно. Не могли бы вы объяснить немного подробнее и показать нам код?
2. Пример кода мог бы помочь, IMO.
Ответ №1:
Это потому, что вы фактически изменяете тот же объект. Например, если у вас есть
Object obj = new Object();
Object obj2 = obj;
На самом деле вы ничего не копируете, вы просто заставляете obj2 «указывать» (не совсем правильный термин, но пока это сработает) на obj. Любые изменения в obj2 будут отражены в obj. Поэтому, если вы хотите фактически скопировать его, вам нужно физически создать новый объект, а затем вручную скопировать все значения в новое создание. Вы могли бы реализовать шаблон прототипа для копирования объекта. Примитивы не ведут себя таким образом, поэтому, если бы вы сделали то же самое, например, с double
или an int
, это вело бы себя так, как вы ожидаете.
Имеет ли все это смысл?
Ответ №2:
Вероятно, у вас возникла проблема с передачей по ссылке вместо передачи по значению. На этой странице объясняется, что я имею в виду http://www.cs.umd.edu/class/sum2004/cmsc420/sum4v3e01/node6.html .
Ответ №3:
Вероятно, вы копируете ссылку на изменяемый объект, а не сам объект; таким образом, после копирования у вас есть две ссылки на один и тот же объект. Изменение этого объекта с помощью любой ссылки будет иметь тот же эффект.
Я не могу сказать вам, как скопировать фактический объект, потому что нет универсального способа сделать это, но многие классы предоставляют конструктор копирования или какой-либо другой способ дублировать себя. Если вам нужна помощь с этим, вам придется предоставить более подробную информацию.