Java中的對象和對象引用

對象:

        在Java中有一句比較流行的話,叫做“萬物皆對象”。要理解什麼是對象,需要跟類一起結合起來理解。下面這段話引自《Java編程思想》中的一段原話:

  “按照通俗的說法,每個對象都是某個類的一個實例,這裏,‘類’就是‘類型’的同義詞。”

  從這一句話就可以理解到對象的本質,簡而言之,它就是類的實例,比如所有的人統稱爲“人類”,這裏的“人類”就是一個類(物種的一種類型),而具體到每個人,比如張三這個人,它就是對象,就是“人類”的實例。



對象引用:

       在Java中一切都被視爲對象。儘管將一切都“看作”對象,但操縱的標識符實際是指向一個對象的“引用“。

        Person person = new Person("張三");

  有人會說,這裏的person是一個對象,是Person類的一個實例。

  也有人會說,這裏的person並不是真正的對象,而是指向所創建的對象的引用。


       Person person;

  person = new Person("張三");

  這兩行代碼實現的功能和上面的一行代碼是完全一樣的。大家都知道,在Java中new是用來在堆上創建對象用的,如果person是一個對象的話,那麼第二行爲何還要通過new來創建對象呢?由此可見,person並不是所創建的對象,是什麼?上面的一段話說的很清楚,“操縱的標識符實際是指向一個對象的引用”,也就是說person是一個引用(引用在底層就是指針,但是Java中不涉及指針),是指向一個可以指向Person類的對象的引用。真正創建對象的語句是右邊的new Person("張三");


         再看一個例子:

  Person person;

  person = new Person("張三");

  person = new Person("李四");

  這裏讓person先指向了“張三”這個對象,然後又指向了“李四”這個對象。也就是說,Person person,這句話只是聲明瞭一個Person類的引用,它可以指向任何Person類的實例。


        也就是說,一個引用可以指向多個對象,而一個對象可不可以被多個引用所指呢?答案當然是可以的。

  比如:

  Person person1 = new Person("張三");

  Person person2 = person1;

  person1和person2都指向了“張三”這個對象。


Java中的引用和C++中的引用是不同的:

    1、Java中的引用只能是對象,對於內置類型沒有引用;

          C++可以對任何類型的變量(或稱爲對象)進行引用。

    2、Java中的引用實際上就是一個指針,能指向該類對象的一個指針,但是操作時又把它當成對象對待;

          C++中的引用雖然也是一個指針,但是把它當成是被引用對象的一個別名,不開闢空間,對引用的操作與對實際變量的操作相同。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章