p***s 发帖数: 78 | 1 void fun() {
Node node = new Node(6);
test(node);
System.out.println(node.data);
}
void test(Node node) {
Node n2 = new Node(5);
node.data = 9;
node = n2;
System.out.println( n2.data);
return;
}
1. 输出是什么?
2. node=n2 这个发生了些什么? |
z*****5 发帖数: 1871 | 2 Node(int n) {
this.data = n;
}
假设Node的构造方法是这样?
我也是新手,不懂,node = n2应该是node的引用从原来的对象指到n2这个对象上了吧
;之后node这个引用访问到的就是n2引用的对象,node.data应该数值上就是n2.data。
对吗? |
p*****2 发帖数: 21240 | |
p***s 发帖数: 78 | 4 那 node = n2 这个有什么影响?
【在 p*****2 的大作中提到】 : 应该是5,9吧
|
g**e 发帖数: 6127 | 5 没影响
【在 p***s 的大作中提到】 : 那 node = n2 这个有什么影响?
|
h******s 发帖数: 86 | 6 why
【在 g**e 的大作中提到】 : 没影响
|
g********s 发帖数: 125 | 7 5,9. 因为Java是pass by value, 所以pass进去的node只是真正object node的
reference的一个copy. 也就是说现在有两个reference指向object node. node.data
= 9,是把object node 给改变了。这里可以通过两个reference中任意一个来改变这个
object node的值。下一行node = n2,只是说这个copy的reference现在指向另外一个
object n2了。也就是只剩下原来那个reference还在指向object node,但是object
node的data被通过pass进去的reference给改了,所以变成了9。 |
h******s 发帖数: 86 | 8 thanks. send you 10 cents
data
【在 g********s 的大作中提到】 : 5,9. 因为Java是pass by value, 所以pass进去的node只是真正object node的 : reference的一个copy. 也就是说现在有两个reference指向object node. node.data : = 9,是把object node 给改变了。这里可以通过两个reference中任意一个来改变这个 : object node的值。下一行node = n2,只是说这个copy的reference现在指向另外一个 : object n2了。也就是只剩下原来那个reference还在指向object node,但是object : node的data被通过pass进去的reference给改了,所以变成了9。
|
g********s 发帖数: 125 | 9 呵呵 谢谢 伪币数第一次过2 不知道回帖楼主还发红包 |
s***0 发帖数: 117 | 10 To make it clearer for C/C++ people.
Node node = new Node();
new Node() creates an object on the heap, and returns the pointer to the
object.
node is really a pointer. When we pass node, the function makes a copy of
the pointer. The rest follows the behaviour of pointers, except node.data is
actually node->data in C/C++.
Plus you don't have worry about garbage collection, so it's more like a
smart pointer.
data
【在 g********s 的大作中提到】 : 5,9. 因为Java是pass by value, 所以pass进去的node只是真正object node的 : reference的一个copy. 也就是说现在有两个reference指向object node. node.data : = 9,是把object node 给改变了。这里可以通过两个reference中任意一个来改变这个 : object node的值。下一行node = n2,只是说这个copy的reference现在指向另外一个 : object n2了。也就是只剩下原来那个reference还在指向object node,但是object : node的data被通过pass进去的reference给改了,所以变成了9。
|
S******1 发帖数: 269 | 11 5, 9
pass by value:
1. For primary number, pass the copy of the value.
2. For object reference, pass the copy of reference. |