我的问题是关于引用如何在Java中工作.据我所知,通过阅读 JLS 4.12.2,引用是一个正式名称,允许使用引用指向的对象.请考虑以下代码:
public class A{
private int a = 0;
void mutate(){
a++;
}
}
public void foo (A a){
a.mutate();
}
public static void main(String[] args){
A a = new A(); //a is a reference to the object of type A
foo(a);
}
Run Code Online (Sandbox Code Playgroud)
函数a
本地的引用是否与main
函数内使用的引用相同foo
?我的意思是==
如果我们将操作符作为一个操作数应用于这些引用,则运算符将返回true吗?
主函数的本地引用是否与foo函数中使用的引用相同?
不,引用不同,两个引用指向的实例都是相同的.
pubic void foo (A a){
Run Code Online (Sandbox Code Playgroud)
a
这里是一个副本的参考a
的main()
(或调用它的任何功能).引用将在此方法的堆栈上,并在方法返回时丢失(Stack unwinds)
public static void main(String[] args){
A a = new A(); //a is a reference to the object of type A // A is a reference on the Stack and local to main().
foo(a);
}
Run Code Online (Sandbox Code Playgroud)
没有,参考a
的main()
是不一样的参数a
的功能foo()
.所有函数参数都在Java中通过值传递.在调用时复制引用(main
's a
)foo()
会创建一个指向同一指示对象的新引用(main()
由表达式创建的对象new A()
).
你会经常听到人们俗称两个引用是"相同的",但真正意味着两个引用指向同一个对象或指示对象.引用本身可能位于不同的寄存器或内存位置,但它们的值 - 它们引用的对象 - 可以是相同的,就像其他语言中的指针和引用一样.
归档时间: |
|
查看次数: |
97 次 |
最近记录: |