Java中的對(duì)象和對(duì)象引用實(shí)例淺析
本文實(shí)例講述了Java中的對(duì)象和對(duì)象引用。分享給大家供大家參考。具體分析如下:
在Java中,有一組名詞經(jīng)常一起出現(xiàn),它們就是“對(duì)象和對(duì)象引用”,很多朋友在初學(xué)Java的時(shí)候可能經(jīng)常會(huì)混淆這2個(gè)概念,覺得它們是一回事,事實(shí)上則不然。今天我們就來一起了解一下對(duì)象和對(duì)象引用之間的區(qū)別和聯(lián)系。
1.何謂對(duì)象?
在Java中有一句比較流行的話,叫做“萬物皆對(duì)象”,這是Java語言設(shè)計(jì)之初的理念之一。要理解什么是對(duì)象,需要跟類一起結(jié)合起來理解。下面這段話引自《Java編程思想》中的一段原話:
“按照通俗的說法,每個(gè)對(duì)象都是某個(gè)類(class)的一個(gè)實(shí)例(instance),這里,‘類'就是‘類型'的同義詞?!?/p>
從這一句話就可以理解到對(duì)象的本質(zhì),簡(jiǎn)而言之,它就是類的實(shí)例,比如所有的人統(tǒng)稱為“人類”,這里的“人類”就是一個(gè)類(物種的一種類型),而具體到每個(gè)人,比如張三這個(gè)人,它就是對(duì)象,就是“人類”的實(shí)例。
2.何謂對(duì)象引用?
我們先看一段話:
“每種編程語言都有自己的數(shù)據(jù)處理方式。有些時(shí)候,程序員必須注意將要處理的數(shù)據(jù)是什么類型。你是直接操縱元素,還是用某種基于特殊語法的間接表示(例如C/C++里的指針)來操作對(duì)象。所有這些在 Java 里都得到了簡(jiǎn)化,一切都被視為對(duì)象。因此,我們可采用一種統(tǒng)一的語法。盡管將一切都“看作”對(duì)象,但操縱的標(biāo)識(shí)符實(shí)際是指向一個(gè)對(duì)象的“引用”(reference)。”
這段話來自于《Java編程思想》,很顯然,從這段話可以看出對(duì)象和對(duì)象引用不是一回事,是兩個(gè)完全不同的概念。舉個(gè)例子,我們通常會(huì)用下面這一行代碼來創(chuàng)建一個(gè)對(duì)象:
Person person = new Person("張三");
有人會(huì)說,這里的person是一個(gè)對(duì)象,是Person類的一個(gè)實(shí)例。
也有人會(huì)說,這里的person并不是真正的對(duì)象,而是指向所創(chuàng)建的對(duì)象的引用。
到底哪種說法是對(duì)的?我們先不急著糾結(jié)哪種說法是對(duì)的,再看兩行代碼:
Person person;
person = new Person("張三");
這兩行代碼實(shí)現(xiàn)的功能和上面的一行代碼是完全一樣的。大家都知道,在Java中new是用來在堆上創(chuàng)建對(duì)象用的,如果person是一個(gè)對(duì)象的話,那么第二行為何還要通過new來創(chuàng)建對(duì)象呢?由此可見,person并不是所創(chuàng)建的對(duì)象,是什么?上面的一段話說的很清楚,“操縱的標(biāo)識(shí)符實(shí)際是指向一個(gè)對(duì)象的引用”,也就是說person是一個(gè)引用,是指向一個(gè)可以指向Person類的對(duì)象的引用。真正創(chuàng)建對(duì)象的語句是右邊的new Person("張三");
再看一個(gè)例子:
Person person;
person = new Person("張三");
person = new Person("李四");
這里讓person先指向了“張三”這個(gè)對(duì)象,然后又指向了“李四”這個(gè)對(duì)象。也就是說,Person person,這句話只是聲明了一個(gè)Person類的引用,它可以指向任何Person類的實(shí)例。這個(gè)道理就和下面這段代碼一樣:
int a; a=2; a=3;
這里先聲明了一個(gè)int類型的變量a,先對(duì)a賦值為2,后面又賦值為3.也就是說int類型的變量a,可以讓它的值為2,也可以為3,只要是合法的int類型的數(shù)值即可。
也就是說,一個(gè)引用可以指向多個(gè)對(duì)象,而一個(gè)對(duì)象可不可以被多個(gè)引用所指呢?答案當(dāng)然是可以的。
比如:
Person person1 = new Person("張三");
Person person2 = person1;
person1和person2都指向了“張三”這個(gè)對(duì)象。
關(guān)于對(duì)象和對(duì)象引用的區(qū)別和聯(lián)系暫時(shí)就講這么多了,感興趣的朋友可以查閱相關(guān)文檔和資料。
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- Java返回可變引用對(duì)象問題整理
- Java對(duì)象的四種引用方式實(shí)例分析
- 面試官:詳細(xì)談?wù)凧ava對(duì)象的4種引用方式
- 詳解Java對(duì)象的強(qiáng)、軟、弱和虛引用+ReferenceQueue
- Java中的對(duì)象和引用詳解
- Java多態(tài)和實(shí)現(xiàn)接口的類的對(duì)象賦值給接口引用的方法(推薦)
- JAVA中的引用與對(duì)象詳解
- 對(duì)Java的面對(duì)對(duì)象編程中對(duì)象和引用以及內(nèi)部類的理解
- 解析Java的JNI編程中的對(duì)象引用與內(nèi)存泄漏問題
- Java基礎(chǔ)教程之對(duì)象引用
- 淺析Java 對(duì)象引用和對(duì)象本身
相關(guān)文章
基于SpringBoot多線程@Async的使用體驗(yàn)
這篇文章主要介紹了SpringBoot多線程@Async的使用體驗(yàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制
本篇文章主要介紹了詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
將InputStream轉(zhuǎn)化為base64的實(shí)例
這篇文章主要介紹了將InputStream轉(zhuǎn)化為base64的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot添加多數(shù)據(jù)源的方法實(shí)例教程
這篇文章主要給大家介紹了關(guān)于springboot添加多數(shù)據(jù)源方法的相關(guān)資料,在實(shí)際開發(fā)中經(jīng)??赡苡龅皆谝粋€(gè)應(yīng)用中可能要訪問多個(gè)數(shù)據(jù)庫(kù)多的情況,需要的朋友可以參考下2023-09-09
mybatis plus 自動(dòng)轉(zhuǎn)駝峰配置小結(jié)
SpringBoot提供兩種配置Mybatis的方式,第一種是通過yml或application.properties文件開啟配置,第二種是使用自定義配置類,通過給容器添加一個(gè)ConfigurationCustomizer來實(shí)現(xiàn)更靈活的配置,這兩種方法可以根據(jù)項(xiàng)目需求和個(gè)人喜好選擇使用2024-10-10
基于Cookie與Session的Servlet?API會(huì)話管理操作
這篇文章主要為大家介紹了基于Cookie與Session的Servlet?API會(huì)話管理操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java8中List轉(zhuǎn)換String字符串幾種方式
這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)換String字符串的幾種方式,在實(shí)際開發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,文中給出了幾種方法的示例代碼,需要的朋友可以參考下2023-07-07
SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式
這篇文章主要介紹了SpringBoot+SpringBatch+Quartz整合定時(shí)批量任務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

