изменить значение в переменной

#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:

Вероятно, вы копируете ссылку на изменяемый объект, а не сам объект; таким образом, после копирования у вас есть две ссылки на один и тот же объект. Изменение этого объекта с помощью любой ссылки будет иметь тот же эффект.

Я не могу сказать вам, как скопировать фактический объект, потому что нет универсального способа сделать это, но многие классы предоставляют конструктор копирования или какой-либо другой способ дублировать себя. Если вам нужна помощь с этим, вам придется предоставить более подробную информацию.