淺談Java中的對象和引用

淺談Java中的對象和對象引用

  在Java中,有一組名詞常常一塊兒出現,它們就是「對象和對象引用」,不少朋友在初學Java的時候可能常常會混淆這2個概念,以爲它們是一回事,事實上則否則。今天咱們就來一塊兒瞭解一下對象和對象引用之間的區別和聯繫。java

1.何謂對象?

  在Java中有一句比較流行的話,叫作「萬物皆對象」,這是Java語言設計之初的理念之一。要理解什麼是對象,須要跟類一塊兒結合起來理解。下面這段話引自《Java編程思想》中的一段原話:程序員

  「按照通俗的說法,每一個對象都是某個類(class)的一個實例(instance),這裏,‘類’就是‘類型’的同義詞。」編程

  從這一句話就能夠理解到對象的本質,簡而言之,它就是類的實例,好比全部的人統稱爲「人類」,這裏的「人類」就是一個類(物種的一種類型),而具體到每一個人,好比張三這我的,它就是對象,就是「人類」的實例。編程語言

2.何謂對象引用?

  咱們先看一段話:spa

  「每種編程語言都有本身的數據處理方式。有些時候,程序員必須注意將要處理的數據是什麼類型。你是直接操縱元素,仍是用某種基於特殊語法的間接表示(例如C/C++裏的指針)來操做對象。全部這些在 Java 裏都獲得了簡化,一切都被視爲對象。所以,咱們可採用一種統一的語法。儘管將一切都「看做」對象,但操縱的標識符實際是指向一個對象的「引用」(reference)。」  設計

  這段話來自於《Java編程思想》,很顯然,從這段話能夠看出對象和對象引用不是一回事,是兩個徹底不一樣的概念。舉個例子,咱們一般會用下面這一行代碼來建立一個對象:指針

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

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

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

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

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

  這兩行代碼實現的功能和上面的一行代碼是徹底同樣的。你們都知道,在Java中new是用來在堆上建立對象用的,若是person是一個對象的話,那麼第二行爲什麼還要經過new來建立對象呢?因而可知,person並非所建立的對象,是什麼?上面的一段話說的很清楚,「操縱的標識符實際是指向一個對象的引用」,也就是說person是一個引用,是指向一個能夠指向Person類的對象的引用。真正建立對象的語句是右邊的new Person("張三");

  再看一個例子:

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

  這裏讓person先指向了「張三」這個對象,而後又指向了「李四」這個對象。也就是說,Person person,這句話只是聲明瞭一個Person類的引用,它能夠指向任何Person類的實例。這個道理就和下面這段代碼同樣:

int a;
a=2;
a=3;

  這裏先聲明瞭一個int類型的變量a,先對a賦值爲2,後面又賦值爲3.也就是說int類型的變量a,可讓它的值爲2,也能夠爲3,只要是合法的int類型的數值便可。

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

  好比:

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

  person1和person2都指向了「張三」這個對象。

  關於對象和對象引用的區別和聯繫暫時就講這麼多了,感興趣的朋友能夠查閱相關文檔和資料。      

相關文章
相關標籤/搜索