LIST 1●將數(shù)值數(shù)據(jù)保存在Java的矢量類中的程序。生成Integer類,然后封裝(Wrap)數(shù)值(點(diǎn)擊放大)
點(diǎn)擊查看大圖
LIST 1●將數(shù)值數(shù)據(jù)保存在Java的矢量類中的程序。生成Integer類,然后封裝(Wrap)數(shù)值(點(diǎn)擊放大) 由于原始類型與對(duì)象型的內(nèi)存治理方法不同,因此就無法生成統(tǒng)一兩種數(shù)據(jù)的類庫。比如,假如只是對(duì)象型數(shù)據(jù)就能夠構(gòu)筑包含任意數(shù)據(jù)的類庫。
LIST 2●執(zhí)行裝箱的C#代碼。將數(shù)值直接代入對(duì)象中。運(yùn)行代碼后,輸出0和1。也就是說變量a和o沒有同一性(點(diǎn)擊放大) 圖2●C#中的裝箱法。對(duì)存放于內(nèi)存堆棧區(qū)中的int型結(jié)構(gòu)體(strUCts)裝箱時(shí),就會(huì)靜靜地在內(nèi)存堆區(qū)中生成對(duì)象。因此就無法確保與初始值的匹配性。(點(diǎn)擊放大) 筆者利用裝箱法,用C#試著寫了一段與在Java的Vector矢量類中保存數(shù)值類似的代碼(LIST 3)。雖然ArrayList類要引數(shù)中提取對(duì)象型變量,但這里由于通過直接int型變量,因此代碼非常整潔。
不過,并沒有解決多余的內(nèi)存消耗和數(shù)值的同一性問題。因?yàn)橹皇菃渭兊貙?shí)現(xiàn)了自動(dòng)向?qū)ο蟮霓D(zhuǎn)換(圖3)。 LIST 3●與LIST 1起相同作用的C#代碼。由于具有裝箱法,因此可以直接向ArrayList中追加數(shù)值