对象引用指的是什么

解决方案 »

  1.   

    刚为朋友写的一个说明。不知是不是解决你的问题。
    我们只能通过(对象的)引用来访问对象
    譬如,我们声明了一个关于人的类:
    class Ren {
      ......
    }
    就可以按这个类创建一个对象:
    Ren ZhangASan = new Ren();
    new操作符引发一次内存的动态分配,为一新对象分配一块足以容纳类Ren中的所有成员。赋值号=把这块空间的首址赋给名为ZhangASan的引用。最左侧的Ren指明该引用是指向Ren类对象的引用。这个说明比书里对对象创建语句的说明(书里多把那个ZhangASan说成是对象本身)要复杂一点。但是,它是正确的。
    再看一段代码:
    Ren ZhangASan = new Ren();
    Ren ZhangMingMing = ZhangASan;
    第二句是再创建一个也是指向Ren类对象的引用,名叫ZhangMingMing。把ZhangASan赋给它,意味着使这两个引用指向同一个对象。容易误解的是,把这两个引用看作是同一物。其实,仍然是两个互不相关的引用,只是在现在,它俩指向同一对象。张阿三和张明明都不是某人,只是某人的名字而已。和现实生活一样,我们通过姓名来访问那个人。
    更不能把它们看成是两个对象。第二个语句没有new操作符,不可能产生新的对象。
    我们再加两个语句,就可以进一步说明问题了。
    Ren ZhangASan = new Ren();
    Ren ZhangMingMing = ZhangASan;
    Ren ZhangASi = new Ren();
    ZhangMingMing = ZhangASi;
    第三句创建了另一个对象和指向它的新的引用ZhangASi(“张阿四”)。第四句使原来的第二个引用ZhangMingMing(“张明明”)和新引用ZhangASi都指向第二个对象。而第一个引用ZhangASan仍然指向第一个对象。这就证明了原来的两个引用ZhangASan和ZhangMingMing不是同一物。
    由此可见,尽管对象是实实在在的,但是你不能直接访问它。只能通过引用来访问它。引用也是一种变量,说它“变”,是你可以使它现在与对象A关联,等一会与另一对象相关联。
    因此,在Java里,看不到对象,只有用来访问对象的引用。