java中对象给对象赋值
package com.java.god;
public class A {
private int m_A;
public int getA(){
return m_A;
}
public void setA(int a) {
m_A = a;
}
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
a1.setA(10); //通过成员方法给对象a1赋值
A a2 = a1; //将对象a1通过“=”赋给对象a2;
System.out.println(a1==a2);
System.out.println(a1.getA());
System.out.println(a2.getA());
a1.setA(20);
System.out.println(a1==a2);
System.out.println(a1.getA());
System.out.println(a2.getA());
}
}
运行结果如下图所示,
在java中,通过“=”将已经实例化的对象赋给另一个对象时,是将这个对象的引用传过去了,所以实际上它们两个指向的是同一块内存地址,也就是指向了同一个对象,所以a1==a2的值为true。
所以当a1改变了这个对象的属性值,那么a2访问时也就得到的是改变了的属性值了。下面是我画的JVM内存图,
实际上,在java中创建对象时,在堆区通过运算符new出来的这一部分内存空间中存放的所有成员叫做对象,前面的a1是在栈区的一个局部变量名,它里面存放了这个对象在堆区的内存地址。
所以在我们在进行 A a2 = a1; 这一步操作时,就是将a1中保存的对象的内存地址通过值传递传给了a2,让a2也指向这个对象。