繁体   English   中英

如何复制Java对象而不更改影响副本的原始对象

[英]How to copy Java object without a change to the original affecting the copy

在addStartNode函数中,我创建了一个新的Node'temp',其值设置为'head'的值。 然后我设置为一个值为'v'的新节点。

但是,当我打印'temp'和'head'的值时,它会显示相同的内容。

我已经尝试了很多不同的方法,包括一个复制构造函数,但它似乎没有改变任何东西。

任何帮助都会很棒!

public class DoublyLinkedList {

    private static class Node {

        private static int value;

        Node(int v) {
            value = v;
        }

        int getValue() {
            return value;
        }
    }

    private static Node head;

    void addStartNode(int v) {
        if (head == null) {
            head = new Node(v);
        } else {
            Node temp = new Node(head.getValue());
            PRINT VALUES HERE
            head = new Node(v);
            PRINT VALUES HERE
        }
    }
}

您已在Node类中将value声明为static

如果属性是静态的,那么它将由Node的所有实例共享。

变化:

private static int value;

private int value;

想象一下,您将代码更改为此代码:

static class Node {

    private static int nbOfNode = 0;
    private int value;

    Node(int v) {
        nbOfNode++;
        value = v;
    }

    int getValue() {
        return value;
    }

    static int getNbOfNode() {
        return nbOfNode;
    }
}

现在value不是静态的,那么Node的每个实例都将具有其正确的值。

另一方面, nbOfNode是静态的,然后它将在Node类的所有实例之间共享,因为它是类级变量。

现在如果你运行这个:

Node n1 = new Node(11);
System.out.println(n1.getValue());
System.out.println(Node.getNbOfNode());
Node n2 = new Node(22);
System.out.println(n2.getValue());
System.out.println(Node.getNbOfNode());

它会产生:

11 - 节点n1的适当值

1 - 递增的共享值

22 - 节点n2的适当值

2 - 共享值的第二个增量

在n2的实例化期间,构造函数将增加与之前通过实例化n1增加的变量相同的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM