在Java中有壹句比較流行的話,叫做“萬物皆對象”,這是Java語言設計之初的理念之壹。要理解什麽是對象,需要跟類壹起結合起來理解。下面這段話引自《Java編程思想》中的壹段原話:
“按照通俗的說法,每個對象都是某個類(class)的壹個實例(instance),這裏,‘類’就是‘類型’的同義詞。”
從這壹句話就可以理解到對象的本質,簡而言之,它就是類的實例,比如所有的人統稱為“人類”,這裏的“人類”就是壹個類(物種的壹種類型),而具體到每個人,比如張三這個人,它就是對象,就是“人類”的實例。
2.何謂對象引用?
我們先看壹段話:
“每種編程語言都有自己的數據處理方式。有些時候,程序員必須註意將要處理的數據是什麽類型。妳是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C/C++裏的指針)來操作對象。所有這些在 Java 裏都得到了簡化,壹切都被視為對象。因此,我們可采用壹種統壹的語法。盡管將壹切都“看作”對象,但操縱的標識符實際是指向壹個對象的“引用”(reference)。”
這段話來自於《Java編程思想》,很顯然,從這段話可以看出對象和對象引用不是壹回事,是兩個完全不同的概念。舉個例子,我們通常會用下面這壹行代碼來創建壹個對象:
Person person = new Person("張三");
有人會說,這裏的person是壹個對象,是Person類的壹個實例。
也有人會說,這裏的person並不是真正的對象,而是指向所創建的對象的引用。
到底哪種說法是對的?我們先不急著糾結哪種說法是對的,再看兩行代碼:
Person person;
person = new Person("張三");
這兩行代碼實現的功能和上面的壹行代碼是完全壹樣的。大家都知道,在Java中new是用來在堆上創建對象用的,如果person是壹個對象的話,那麽第二行為何還要通過new來創建對象呢?由此可見,person並不是所創建的對象,是什麽?上面的壹段話說的很清楚,“操縱的標識符實際是指向壹個對象的引用”,也就是說person是壹個引用,是指向壹個可以指向Person類的對象的引用。真正創建對象的語句是右邊的new Person("張三");