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 对象直接赋值 java对象给对象赋值_System


在java中,通过“=”将已经实例化的对象赋给另一个对象时,是将这个对象的引用传过去了,所以实际上它们两个指向的是同一块内存地址,也就是指向了同一个对象,所以a1==a2的值为true。

所以当a1改变了这个对象的属性值,那么a2访问时也就得到的是改变了的属性值了。下面是我画的JVM内存图,

java 对象直接赋值 java对象给对象赋值_jvm_02


实际上,在java中创建对象时,在堆区通过运算符new出来的这一部分内存空间中存放的所有成员叫做对象,前面的a1是在栈区的一个局部变量名,它里面存放了这个对象在堆区的内存地址。

所以在我们在进行 A a2 = a1; 这一步操作时,就是将a1中保存的对象的内存地址通过值传递传给了a2,让a2也指向这个对象。