發(fā)布日期:2020-06-25 18:00
包裝數(shù)據(jù)類(lèi)型與傳統(tǒng)數(shù)據(jù)類(lèi)型之間的差別
包裝數(shù)據(jù)類(lèi)型
我們知道Java中有八種基本數(shù)據(jù)類(lèi)型,它們對(duì)應(yīng)于八種打包類(lèi)型。 因此,回想一下,當(dāng)您在代碼中使用基包裝數(shù)據(jù)類(lèi)型或打包類(lèi)型時(shí),選擇標(biāo)準(zhǔn)是什么? 有沒(méi)有標(biāo)準(zhǔn)? 今天,讓我們來(lái)看看包裝類(lèi)型。
基本類(lèi)型屬于原始數(shù)據(jù)類(lèi)型,并且原始值存儲(chǔ)在變量中。 包裝類(lèi)型是參考數(shù)據(jù)類(lèi)型,并且變量存儲(chǔ)存儲(chǔ)原始值的地址的參考。 讓我們不要考慮將內(nèi)存空間的不同區(qū)域用于不同目的的不同用途,將其作為一個(gè)整體來(lái)考慮,并考慮以下語(yǔ)句的內(nèi)存分配過(guò)程。
其實(shí)答案很簡(jiǎn)單,考慮一下緩存的含義,您可以想到,為了使緩存真正有效,您應(yīng)該放置一些最常用的數(shù)據(jù) 在緩存中。 但是,對(duì)于小數(shù),選擇一個(gè)元素?cái)?shù)量不受限制的集合。 因此,Java在考慮此問(wèn)題時(shí)可能無(wú)法考慮該問(wèn)題。 應(yīng)該使用包裝數(shù)據(jù)類(lèi)型的什么標(biāo)準(zhǔn)來(lái)判斷,哪些元素應(yīng)該放置在緩存中,所以我放棄了,只是沒(méi)有緩存。
方法的返回值取決于它是否可以為null以確定是使用包裝器類(lèi)還是使用基本類(lèi)。 當(dāng)方法的返回值不能為null時(shí),建議使用基本類(lèi)作為返回值。 這樣,當(dāng)調(diào)用者獲得此方法的返回值時(shí),無(wú)需擔(dān)心它為null。 基本類(lèi)型在方法內(nèi)部使用(局部變量)。 在時(shí)間效率和效率方面,基本類(lèi)型優(yōu)于包裝。 因此,在該包裝數(shù)據(jù)類(lèi)型的方法內(nèi),可以盡可能使用基本類(lèi)型而不使用包裝類(lèi)。
包裝器類(lèi)創(chuàng)建一個(gè)對(duì)象,該對(duì)象具有方法和字段。 對(duì)象的調(diào)用是通過(guò)引用對(duì)象的地址,并且該引用存在于堆棧存儲(chǔ)器中。 基本類(lèi)型直接存儲(chǔ)在堆內(nèi)存中,直接存儲(chǔ)Value。 另一個(gè)區(qū)別是包裝類(lèi)是通過(guò)引用傳遞的,而基本類(lèi)型是通過(guò)值傳遞的。 變量的值存儲(chǔ)在堆棧中,而對(duì)象存儲(chǔ)在堆中。 相比之下,堆棧效率更高,這也是java保留基本類(lèi)型的原因。 包裝數(shù)據(jù)類(lèi)型創(chuàng)建的對(duì)象可以使用api提供的一些有用方法。 更加強(qiáng)大。
有一個(gè)有趣的字段Integer.TYPE Integer關(guān)于包裝類(lèi),例如。 該字段返回后面是對(duì)Class對(duì)象的引用,Integer.TYPE和int.class表示相同。 順便說(shuō)一下,String實(shí)際上不是char的純數(shù)組,而是引用類(lèi)型。 應(yīng)用程序類(lèi)型是用戶(hù)自己定義的某些類(lèi),或者Java等提供的某些類(lèi)通常是使用構(gòu)造函數(shù)構(gòu)造的。 還有一個(gè)常用的引用類(lèi)型:BigInteger,通常將其當(dāng)作一個(gè)大數(shù)字來(lái)處理,其字節(jié)大小取決于JVM可用的大小。 由于Java中的重載運(yùn)算符只是+ =和+,因此您無(wú)法進(jìn)行基本包裝數(shù)據(jù)類(lèi)型之類(lèi)的操作。 相反,您可以使用BigInteger的函數(shù)進(jìn)行操作。
包裝類(lèi)是具有方法和字段的對(duì)象,并且通過(guò)引用對(duì)象的地址來(lái)調(diào)用該對(duì)象; 基本類(lèi)型不是包裝類(lèi)型是引用的傳遞; 基本類(lèi)型是值的傳遞。 聲明方法不同:基本數(shù)據(jù)類(lèi)型不需要new關(guān)鍵字; 打包類(lèi)型需要new才能在堆內(nèi)存中分配新內(nèi)存。
存儲(chǔ)位置不同:基本數(shù)據(jù)類(lèi)型直接將值保存在值堆棧中; 打包類(lèi)型是將對(duì)象放在堆上,然后通過(guò)引用該對(duì)象來(lái)調(diào)用它們。 初始值不同:int的初始值為0,布爾的初始值為false,包裝類(lèi)型的初始值為null。 使用方式不同:直接分配和使用基本包裝數(shù)據(jù)類(lèi)型; 包裝類(lèi)型用于CoolectionMap等集合中。
基本數(shù)據(jù)類(lèi)型通常在堆棧上分配。 如果要在堆上分配它們,則只能使用基本數(shù)據(jù)類(lèi)型包裝器類(lèi)。 讓我們以Double double為例,基本數(shù)據(jù)類(lèi)型包裝數(shù)據(jù)類(lèi)型可以調(diào)用一系列方法。 例如,通常在包裝類(lèi)方法的底層調(diào)用常用的力傳遞。
Java不是純粹的面向?qū)ο笳Z(yǔ)言。 Java是一種面向?qū)ο蟮恼Z(yǔ)言,但是Java的基本數(shù)據(jù)類(lèi)型不是面向?qū)ο蟮摹?但是,在實(shí)際使用中,我們經(jīng)常需要將基本數(shù)據(jù)轉(zhuǎn)換為對(duì)象以便于操作。 例如:在集合的操作中,這是我們需要將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為對(duì)象的地方。
自動(dòng)裝箱:將基本類(lèi)型轉(zhuǎn)換為包裝類(lèi)型; 自動(dòng)拆箱:將包裝類(lèi)型轉(zhuǎn)換為基本類(lèi)型注意:使用時(shí),Integer x = null; 該代碼將出現(xiàn)NullPointerException。 建議在使用前確定它是否為空。
基本類(lèi)型屬于原始數(shù)據(jù)類(lèi)型,并且原始值存儲(chǔ)在變量中。 包裝類(lèi)型是參考包裝數(shù)據(jù)類(lèi)型,并且變量存儲(chǔ)存儲(chǔ)原始值的地址的參考。