在将一个变量分配给另一个变量之后,为什么更改另一个变量不会改变另一个

时间:2016-01-31 18:04:14

标签: java

public class IntList {
    private IntNode _head;
    public IntList() {
        _head = null;
    }
 }

我创建了一个名为IntList的类。 IntList包含一个搜索具有指定int值的IntNode对象的方法。这是方法:

public boolean findElementInList(int value) {
    IntNode currentNode = this._head;

    while (currentNode.getValue() != value && 
           currentNode.getNext () != null) {
        currentNode = currentNode.getNext();
    }

    return (currentNode.getValue() == value);
}

方法完成后,原始的_head实例变量完好无损 - 但为什么呢? currentNode指向方法中的_head(别名),对currentNode所做的每项更改也应反映在_head中(每次我们运行currentNode = currentNode.getNext();时)

这是getNext()的代码:

public IntNode getNext( ) {return _next;}

3 个答案:

答案 0 :(得分:1)

您可以在头开始将头部的值分配给currentNode。可以把它想象成2个不同的指针指向内存中的相同值。但是,您继续将列表中的下一个值分配给currentNode,而_head保持不变。顺便说一句,如果你改变你的头部价值,你将失去你的名单。

答案 1 :(得分:0)

您永远不会更改原始<form> Barcode: <input type="text" class="barcode" tabindex="1"> | Quantity: <input type="text" class="quantity"><br> Barcode: <input type="text" class="barcode" tabindex="2"> | Quantity: <input type="text" class="quantity"><br> Barcode: <input type="text" class="barcode" tabindex="3"> | Quantity: <input type="text" class="quantity"><br> Barcode: <input type="text" class="barcode" tabindex="4"> | Quantity: <input type="text" class="quantity"><br> Barcode: <input type="text" class="barcode" tabindex="5"> | Quantity: <input type="text" class="quantity"><br> Barcode: <input type="text" class="barcode" tabindex="6"> | Quantity: <input type="text" class="quantity"> </form>。您只需实例化指向_head的{​​{1}}。如果你想改变currentNode,你应该在最后用不同的值改变你的头,而不仅仅是指向它。例如_head

答案 2 :(得分:0)

您的head实例变量保持不变,因为您未在findElementInList方法中修改其任何内容。

举个例子:

这样的东西
_head.setValue(10);

currentNode = this._head;
currentNode.setValue(10);

将修改您的头节点。在currentNode.setValue(10);的情况下,由于'别名','this._head'的内容将被修改 - 两个变量都指向同一位置。

重要提示:为currentNode分配新值根本不会修改this.head的值。它只是让currentNode指向一个新节点。所以

currentNode = currentNode.getNext();

让currentNode指向其postscessor而不改变this._head的内容。这就是“指向对象的Java变量只是引用”的含义。

在某些情况下,对变量的赋值将更改变量值:

currentNode.setValue(10);

int x = 10;    x = x + 1; // x == 11

会改变一些价值。在第一种情况下,您将在第二种情况下使用所谓的“原始值”更改对象内容,该原始值不是对某种对象的引用。