【发布时间】:2017-08-07 05:57:18
【问题描述】:
查看测试代码:
class Node
{
int num = 0;
}
class TestPassByReference
{
void increaseByOne(Node N)
{
N.num++ ;
}
public static void main(String args[])
{
Node N = new Node() ;
TestPassByReference T = new TestPassByReference() ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
T.increaseByOne(N) ;
System.out.println("num = "+N.num) ;
}
}
结果如下:
num = 1
num = 2
num = 3
这里的问题是,既然Java 是call by value,那么Node 的num 属性应该保持为0。
我认为这是由于创建了一个对象T,该对象将包含一个对象N。但是T 中没有用于保存Node 类似对象的属性。那么这是怎么回事呢?
非常感谢任何帮助。
月亮。
【问题讨论】:
-
N 是按值调用的。当您使用点引用该值时,您将复制的值保留为对象引用并引用该对象。这在其他语言中称为指针。
标签: java object reference pass-by-value