我的问题是关于引用如何在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 次 |
| 最近记录: |