Нулевое значение не содержится в ссылочной переменной объекта в Java - PullRequest
0 голосов
/ 03 мая 2020
   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

Упоминается в других ресурсах и, насколько я понимаю, когда состояние объекта изменяется, оно должно отражаться и в другой ссылочной переменной. Но во втором сценарии я запутался. Подскажите пожалуйста, как работает ссылка?

Спасибо

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