理解对象创建和引用变量

时间:2017-03-25 14:38:38

标签: java oop object reference

无论什么时候我都明白

a=b

它意味着b中的任何值都是a。换句话说,无论b在何处引用它,现在都指向一个。

的内存位置

当我说

时考虑到
a=b-----1)
b=a-----2)

这意味着内存寻址和存储在此内存位置的值。

我知道在堆内存中创建引用时会在堆内存中创建对象。但我希望更深入地了解此代码的每一行实际发生的情况。

有人可以更深入地解释对象创建和参考变量的基本概念。

public class ABC
{
        public Object add(Object a, Object b)
         {
           a=new Object();
           b=new Object();
           a=b;
           b=a;
           System.out.println("a= "+a);
           System.out.println("b= "+b);    
           ABC c=new ABC();
           return c;
        }
    public static void main (String[] args) throws java.lang.Exception
     {
       ABC cc=new ABC();
       Object c=cc.add(4,5);
       System.out.println("c= "+c);
     }
}

2 个答案:

答案 0 :(得分:0)

Java始终创建对象,除非堆上的基本对象并且它继续引用堆栈上的内存位置。然后,如果引用计数变为零,它会跟踪对该内存位置的所有引用,从而破坏对象。

现在当你构造a和b时,它们会对两个对象有不同的引用(因为它们都是不同的构造)但是当你指定ba时会有第二个(b)对象的引用,使第二行自我赋值(因为它们在内存位置具有相同的地址)。

答案 1 :(得分:0)

初始化基元变量与初始化引用变量不同,因为基元变量具有特定值。例如;

    int i = 5;
    int j = 20;
    i = j;
    j = 15;

如果您运行此代码,那么" i"变量的值不会改变,因为" i"持有" 20"。变量是什么变化"指向"至。换句话说,如果你去获取i的值,它将指向j,这是变量所在的位置。

但是引用显示或保存属于对象的地址。例如

    1  Object a = new Object();
    2  Object b = new Object();
    3  a = b;
    4  b = a;

在第一行和第二行中,您将创建两个对象。 ""和" b"是用于跟踪其数据保存位置的引用。

第三行和第四行只是改变了对象的地址,而不是它的实际属性。它们是彼此的别名,这意味着它们不一定是具有相同值的两个对象,但是基本上相同的对象被指向具有两个不同的变量(a和b)。