因此,有充分的文献记录了方法如何与参数传递一起使用,以通过参考/按值传递,但是可变分配呢?
例如,我只是编写了一些看起来像:
的代码TreeNode<T> parent = null;
TreeNode<T> current = m_root;
while(current != null) {
parent = current;
current = current.getRight();
}
现在,我怎么知道parent
在while
循环中最后一次分配后不等于current.getRight()
?什么是规则?
java中的规则是什么规则,"通过参考"/"按值逐值"的变量分配?
与将事物传递到方法中相同:值已复制,没有提及变量。
现在,我如何知道
parent
在while
环路中最后一个分配后不等于current.getRight()
?什么是规则?
您不这样做,它们都可能是null
。但是,如果其中一个不是 null
,那么您知道它们并不相等,因为循环在current
为null
之前继续进行,因此,如果parent
不是null
,则它们不能相等。<<<<<<<<<<<</p>
但在这里当心。parent
和current
可以保持的值是对象引用。(该句子中的"参考"具有 nothing 与"通过逐次参考"中的"参考"进行操作。只是使用"参考"一词对于不同上下文中的许多不同事物。)因此,这两个变量都可以通过在两个变量中具有相同的值(相同对象引用)来指代相同的对象。
对于变量,这与方法参数完全相同。让我们使用一个更简单的示例:
Foo a = new Foo();
Foo b = a;
我们在内存中有一个Foo
对象,a
和b
变量都包含相同的值,这是对该对象的引用。但是,两个变量之间有连接。因此,例如,如果我们添加此信息:
b = new Foo();
...现在我们有两个Foo
在内存中,a
是指(指向)其中一个对象,而b
指的是另一个。这样做对a
中的值根本没有影响。(正是a
和b
是int
s。)
这是一个示例,可能有助于表明通过值/参考工作方式通过:
http://blog.aaronshaw.net/2014/02/13/java-is-is-always-pass-by-value/
我会发表评论,但他们很难注意到。