据我所知,如果我正在写
Car a3=new Car()
该语句将在 jvm 堆栈中创建一个名为 a3
的句柄,其所有属性都在 JVM 堆中。
如果这是正确的,我想知道按值调用是如何工作的。
因此,如果我创建一个方法 checkMethod(Car c)
并通过说 checkMethod(a3);
调用它
假设我们的车是
public class Car{
int a=0;
public int getpar(){
return a;
}
}
在checkMethod
中,我尝试访问using a3.a = 5;
,所以我更改了a3.a
的值
它将在调用类中向我显示,并且它指向 jvm 在堆中创建的相同字段。
但是当我在调用方法中执行 a3= null;
并再次返回我调用的方法时
checkMethod(a3)
并尝试查看该对象是否为空?
为什么它的行为与 a 对象的属性相比不同???
最佳答案
checkMethod(a3);
传递一个值的副本,该值是对 Car 对象实例的引用
内部方法...
a3.a = 5
使用a3,修改由a3标识的Car的对象实例(它是原始a3的副本)。
a3 = null
将引用设置为 null(复制)
发生这种情况时,只有传递给方法的副本才会指向 null。但原来的 a3 仍然指向你的 Car 对象实例。
关于java - 当我在java中创建一个对象时,jvm中到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526583/