溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

深入淺析Java中的對象與引用

發(fā)布時(shí)間:2020-11-19 15:44:26 來源:億速云 閱讀:152 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關(guān)深入淺析Java中的對象與引用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Java中的對象和引用詳解

 在Java中,有一組名詞經(jīng)常一起出現(xiàn),它們就是“對象和對象引用”,很多朋友在初學(xué)Java的時(shí)候可能經(jīng)常會混淆這2個(gè)概念,覺得它們是一回事,事實(shí)上則不然。今天我們就來一起了解一下對象和對象引用之間的區(qū)別和聯(lián)系。

1.何謂對象?

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

  “按照通俗的說法,每個(gè)對象都是某個(gè)類(class)的一個(gè)實(shí)例(instance),這里,‘類'就是‘類型'的同義詞?!?/span>

  從這一句話就可以理解到對象的本質(zhì),簡而言之,它就是類的實(shí)例,比如所有的人統(tǒng)稱為“人類”,這里的“人類”就是一個(gè)類(物種的一種類型),而具體到每個(gè)人,比如張三這個(gè)人,它就是對象,就是“人類”的實(shí)例。

2.何謂對象引用?

  我們先看一段話:

  “每種編程語言都有自己的數(shù)據(jù)處理方式。有些時(shí)候,程序員必須注意將要處理的數(shù)據(jù)是什么類型。你是直接操縱元素,還是用某種基于特殊語法的間接表示(例如C/C++里的指針)來操作對象。所有這些在 Java 里都得到了簡化,一切都被視為對象。因此,我們可采用一種統(tǒng)一的語法。盡管將一切都“看作”對象,但操縱的標(biāo)識符實(shí)際是指向一個(gè)對象的“引用”(reference)?!薄 ?/p>

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

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

  有人會說,這里的person是一個(gè)對象,是Person類的一個(gè)實(shí)例。

  也有人會說,這里的person并不是真正的對象,而是指向所創(chuàng)建的對象的引用。

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

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

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

  再看一個(gè)例子:

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

  這里讓person先指向了“張三”這個(gè)對象,然后又指向了“李四”這個(gè)對象。也就是說,Person person,這句話只是聲明了一個(gè)Person類的引用,它可以指向任何Person類的實(shí)例。這個(gè)道理就和下面這段代碼一樣:

int a;
a=2;
a=3;

  這里先聲明了一個(gè)int類型的變量a,先對a賦值為2,后面又賦值為3.也就是說int類型的變量a,可以讓它的值為2,也可以為3,只要是合法的int類型的數(shù)值即可。

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

  比如:

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

看完上述內(nèi)容,你們對深入淺析Java中的對象與引用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI