天天看點

2014年4月30日 淺談Java中的對象和引用

  在Java中,有一組名詞經常一起出現,它們就是“對象和對象引用”,很多朋友在初學Java的時候可能經常會混淆這2個概念,覺得它們是一回事,事實上則不然。今天我們就來一起了解一下對象和對象引用之間的差別和聯系。

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

  “按照通俗的說法,每個對象都是某個類(class)的一個執行個體(instance),這裡,‘類’就是‘類型’的同義詞。”

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

  我們先看一段話:

  “每種程式設計語言都有自己的資料處理方式。有些時候,程式員必須注意将要處理的資料是什麼類型。你是直接操縱元素,還是用某種基于特殊文法的間接表示(例如C/C++裡的指針)來操作對象。所有這些在 Java 裡都得到了簡化,一切都被視為對象。是以,我們可采用一種統一的文法。盡管将一切都“看作”對象,但操縱的辨別符實際是指向一個對象的“引用”(reference)。”  

  這段話來自于《Java程式設計思想》,很顯然,從這段話可以看出對象和對象引用不是一回事,是兩個完全不同的概念。舉個例子,我們通常會用下面這一行代碼來建立一個對象:

1

<code>Person person = </code><code>new</code> <code>Person(</code><code>"張三"</code><code>);</code>

  有人會說,這裡的person是一個對象,是Person類的一個執行個體。

  也有人會說,這裡的person并不是真正的對象,而是指向所建立的對象的引用。

  到底哪種說法是對的?我們先不急着糾結哪種說法是對的,再看兩行代碼:

2

<code>Person person;</code>

<code>person = </code><code>new</code> <code>Person(</code><code>"張三"</code><code>);</code>

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

  再看一個例子:

3

<code>person = </code><code>new</code> <code>Person(</code><code>"李四"</code><code>);</code>

  這裡讓person先指向了“張三”這個對象,然後又指向了“李四”這個對象。也就是說,Person person,這句話隻是聲明了一個Person類的引用,它可以指向任何Person類的執行個體。這個道理就和下面這段代碼一樣:

<code>int</code> <code>a;</code>

<code>a=</code><code>2</code><code>;</code>

<code>a=</code><code>3</code><code>;</code>

  這裡先聲明了一個int類型的變量a,先對a指派為2,後面又指派為3.也就是說int類型的變量a,可以讓它的值為2,也可以為3,隻要是合法的int類型的數值即可。

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

  比如:

<code>Person person1 = </code><code>new</code> <code>Person(</code><code>"張三"</code><code>);</code>

<code>Person person2 = person1;</code>

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

  關于對象和對象引用的差別和聯系暫時就講這麼多了,感興趣的朋友可以查閱相關文檔和資料。      

  本文轉載自海 子部落格園部落格,原文連結:http://www.cnblogs.com/dolphin0520/p/3592498.html如需轉載自行聯系原作者