public class ObjectArrayValue {
private Queue queue;
public ObjectArrayValue(Queue queue) {
this.queue = queue;
}
@Override
public String toString() {
return "ObjectArrayValue{" + "queue=" + queue + '}';
}
public static void main(String[] args) {
Queue queue = new Queue(1,null);
Queue queue1 = new Queue(2, queue);
Queue queue2 = new Queue(3, queue1);
Queue queue3 = new Queue(4, queue2);
ObjectArrayValue objectArrayValue = new ObjectArrayValue(queue3);//4,3,2,1
Queue currentQueue= objectArrayValue.queue.getName();//3,2,1
Queue nextQueue= objectArrayValue.queue;//4,3,2,1
nextQueue.setName(null);// line 24
System.out.println(currentQueue);// It should be null,but i showing 3,2,1
System.out.println(nextQueue);//4->null
System.out.println(objectArrayValue);4->null
}
}
Класс Pojo:
class Queue {
private int line;
private Queue name;
@Override
public String toString() {
return "Queue{" + "line=" + line + ", name=" + name + '}';
}
public Queue(int line, Queue name) {
this.line = line;
this.name = name;
}
public int getLine() {
return line;
}
public void setLine(int line) {
this.line = line;
}
public Queue getName() {
return name;
}
public void setName(Queue name) {
this.name = name;
}
}
Выше программы были протестированы некоторые сценарии: создание двух ссылок на объекты, сопоставленных с объектом.
ObjectArrayValue objectArrayValue = new ObjectArrayValue(queue3);
Queue currentQueue= objectArrayValue.queue.getName();
Queue nextQueue= objectArrayValue.queue;
Первый сценарий: удаление значений 2 и 1 от узлов.
изменяющаяся строка 24:
nextQueue.getName (). SetName (null);
Вывод:
Queue{line=3, name=null}-> CurrentQueue reference display correctly
Queue{line=4, name=Queue{line=3, name=null}}nextQueue reference display correctly
ObjectArrayValue{queue=Queue{line=4, name=Queue{line=3, name=null}}}Original objectArrayValue reference
display correctly
Второй сценарий: удаление значений 3,2 и 1. из узлов.
Снова попытка изменить строку 24
nextQueue.setName (null);
Queue{line=3, name=Queue{line=2, name=Queue{line=1, name=null}}}->Instead of printing null,it is printing list of values,confused here
Queue{line=4, name=null}->nextQueue reference display correctly
ObjectArrayValue{queue=Queue{line=4, name=null}}->Original objectArrayValue reference display correctly
Упоминается в других ресурсах и, насколько я понимаю, когда состояние объекта изменяется, оно должно отражаться и в другой ссылочной переменной. Но во втором сценарии я запутался. Подскажите пожалуйста, как работает ссылка?
Спасибо