![]() |
1
3
不,编译器是正确的。:)
|
![]() |
2
2
理解这一点的关键是要记住,所有对象都是通过引用间接访问的。当对象作为参数传递给方法时,实际传递的“值”是一个引用,而不是对象本身。
下面是一个例子,其中通过引用传递涉及非局部更改,
打印结果为
请注意,这不会引发NullPointerException,即使l被指定为null。和以前一样,它是一个引用,因此它是对该引用值的局部赋值。 |
![]() |
3
1
你的
|
![]() |
4
1
如果你把m设为X,把l设为X。我们有两个变量引用同一个地址,如果您将其中一个变量更改为null,另一个变量将保留为旧值。 |
![]() |
5
1
比如说,
|
![]() |
6
0
不,你说得不对。Java和许多其他高级语言一样 call by sharing . 您可以这样想:对实际参数的引用是通过值传递的。这意味着在被调用函数中,引用最初指向相同的值,因此对值本身的任何更改在被调用函数的范围之外都是可见的,但是对本地引用的任何更改都是不可见的。就好像传递了地址的副本。 |