主頁(yè) > 知識(shí)庫(kù) > 詳解Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu)

詳解Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu)

熱門(mén)標(biāo)簽:呼叫中心市場(chǎng)需求 Win7旗艦版 客戶(hù)服務(wù) 百度AI接口 企業(yè)做大做強(qiáng) 電話(huà)運(yùn)營(yíng)中心 語(yǔ)音系統(tǒng) 硅谷的囚徒呼叫中心

前言

       我們知道在Java中數(shù)組屬于引用數(shù)據(jù)類(lèi)型,它整個(gè)數(shù)組的數(shù)組元素既可以是基本數(shù)據(jù)類(lèi)型的(如 byte \ int \ short \ long \ float \ double \ char \ boolean 這些),也可以是引用數(shù)據(jù)類(lèi)型的。當(dāng)它的數(shù)組元素是基本數(shù)據(jù)類(lèi)型時(shí),這個(gè)數(shù)組就是一個(gè)一維數(shù)組;當(dāng)它的數(shù)組元素是引用數(shù)據(jù)類(lèi)型時(shí),它就是一個(gè)多維數(shù)組。比如,在一個(gè)數(shù)組中它的某個(gè)元素值其實(shí)是一個(gè)一維數(shù)組,而其他不同的元素也各自包含了一個(gè)一維數(shù)組,我們就把這個(gè)包含很多個(gè)一維數(shù)組的數(shù)組叫做二維數(shù)組。

1、內(nèi)存中的簡(jiǎn)化結(jié)構(gòu)

       內(nèi)存也叫做主存,它是計(jì)算機(jī)五大部件(輸入設(shè)備、輸出設(shè)備、運(yùn)算器、控制器、存儲(chǔ)器)中存儲(chǔ)器的一部分。在Java中我們可以簡(jiǎn)單的將 內(nèi)存分為棧、堆和方法區(qū)三部分,其中方法區(qū)又包含了常量池和靜態(tài)域。如下圖所示,下面來(lái)解釋一下這三部分的作用:
                   屬于線(xiàn)性表中的一種,它 具有先進(jìn)后出的性質(zhì),在 Java 中我們 用來(lái)存放局部變量,如某方法里的數(shù)組名。
                   它存放的東西其長(zhǎng)度、類(lèi)型不一定相等,一般存放的都是 new 出來(lái)的結(jié)構(gòu),像數(shù)組、對(duì)象這些。
       方法區(qū)     可以存放各種我們自定義的方法。

 內(nèi)存的簡(jiǎn)單結(jié)構(gòu)

2、一維數(shù)組

       下面我們來(lái)通過(guò)代碼了解一下,一維數(shù)組在內(nèi)存中的表現(xiàn)形式。我們先定義一個(gè)ArrayTest類(lèi)。

public class ArrayTest{
		public static void main(String[] args){
			//定義三個(gè)數(shù)組 a[]、b[]、c[]
			int[] a = new int[]{1,2,3};
			float[] b = new float[3];
			String[] c = new String[4];
			
			//給特定元素賦值
			c[1] = "張三";
			c[2] = "李四";
			
			//改變變量指向
			c = new String[2];
		}
	}

       上面的代碼中,我們定義了三個(gè)數(shù)組 a[ ]、b[ ]、c[ ] 就相當(dāng)于 在堆開(kāi)辟了三個(gè)各自連續(xù)的空間作為數(shù)組,如果指定了數(shù)組元素的值,則存放的是各個(gè)指定的值。如果沒(méi)有指定,則存放的是默認(rèn)該數(shù)組類(lèi)型的初始化值,如 b[ ] 。然后會(huì) 在棧里依次定義三個(gè)變量 a、b、c ,三個(gè)變量存放的是各自對(duì)應(yīng)的數(shù)組的地址值,如 a 存放的是 0x1234,而堆里該數(shù)組的地址是 0x11234 。
       給元素賦值的話(huà)就相當(dāng)于用我們指定的值覆蓋原有的值。下面我們來(lái)重點(diǎn)看一下這一句:

c = new String[2];

      原本棧中的 c 變量存放的地址是 0x12ab 的,指向綠色的數(shù)組,但是我們 使用了這句話(huà)就相當(dāng)于在堆中又重新開(kāi)辟了一個(gè)數(shù)組,并將這個(gè)數(shù)組的地址賦給了變量 c ,也就是說(shuō)** c 這個(gè)時(shí)候的指向變量,不再指向原來(lái)的數(shù)組了,而是指向了新的數(shù)組**。而沒(méi)有變量指向的原有數(shù)組會(huì)被 Java 自動(dòng)回收。這就是一維數(shù)組在內(nèi)存中的表現(xiàn)形式。那么二維數(shù)組在內(nèi)存中又是如何表示的呢?

 一維數(shù)組在內(nèi)存中的表現(xiàn)形式

3、二維數(shù)組

       其實(shí) 在底層中并沒(méi)有二維數(shù)組這個(gè)概念,我們知道數(shù)組是引用數(shù)據(jù)類(lèi)型,其元素值可以是基本數(shù)據(jù)類(lèi)型,又可以是引用數(shù)據(jù)類(lèi)型。所謂的 二維數(shù)組其實(shí)就相當(dāng)于我們?cè)趦?nèi)存中開(kāi)辟了一個(gè)數(shù)組空間,只不過(guò)它的那個(gè)元素各自指向一個(gè)數(shù)組 。
下面我們來(lái)舉個(gè)例子:

public class ArrayTest2{
		public static void main(String[] args){
			int[][] arr1 = new int[3][]{ {1,2,3},{4,5},{6,7,8,9} };
			
			//這個(gè)是二維數(shù)組的長(zhǎng)度
			System.out.println(arr1.length);
			
			//這個(gè)是二維數(shù)組中的某個(gè)元素所指向的數(shù)組的長(zhǎng)度
			System.out.println(arr1[2].length);
		}
	}

        上面的代碼中,我們定義了一個(gè)二維數(shù)組 arr1[ ][ ],并給它初始化了。就相當(dāng)于我們?cè)诙阎虚_(kāi)辟了四個(gè)一維數(shù)組,其中一個(gè)一維數(shù)組用來(lái)存放二維數(shù)組的元素,然后由二維數(shù)組的元素各自指向一個(gè)一維數(shù)組。棧中定義了一個(gè)變量 arr1 ,存放的是該二維數(shù)組的地址,如下圖所示。

  

二維數(shù)組在內(nèi)存中的表現(xiàn)形式

       可以看到我們定義的二維數(shù)組 arr1[3][0] 其實(shí)存放的都是各自元素所指向的元素的地址值。而在棧中存放的則是該數(shù)組的地址值。
好了,知道了二維數(shù)組在內(nèi)存的結(jié)構(gòu),我們便可以知道下面兩句代碼的值:

	//這個(gè)是二維數(shù)組的長(zhǎng)度
			System.out.println(arr1.length);
			
			//這個(gè)是二維數(shù)組中的某個(gè)元素所指向的數(shù)組的長(zhǎng)度
			System.out.println(arr1[2].length);
		}
	}

       其中 arr1.length 所指的就是二維數(shù)組的長(zhǎng)度,那么二維數(shù)組的長(zhǎng)度是多少呢?答案是 3 。而 arr1[2].length 所指的是該二維數(shù)組中第 3 個(gè)元素所指向的數(shù)組的長(zhǎng)度,因此它的值是 4 。這兩者的區(qū)別需要結(jié)合圖細(xì)細(xì)體會(huì)。

到此這篇關(guān)于詳解Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Java一維、二維數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python爬蟲(chóng) 批量爬取下載抖音視頻代碼實(shí)例
  • Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻
  • Python實(shí)現(xiàn)爬蟲(chóng)從網(wǎng)絡(luò)上下載文檔的實(shí)例代碼
  • Python爬蟲(chóng)獲取圖片并下載保存至本地的實(shí)例
  • Python3.x爬蟲(chóng)下載網(wǎng)頁(yè)圖片的實(shí)例講解
  • Python 給我一個(gè)鏈接 西瓜視頻隨便下載 爬蟲(chóng)

標(biāo)簽:安康 長(zhǎng)沙 喀什 海南 山西 山西 濟(jì)南 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Java中一維、二維數(shù)組在內(nèi)存中的結(jié)構(gòu)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266