最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎(chǔ)知識精通數(shù)組的內(nèi)存分析

 更新時間:2022年04月28日 15:41:57   作者:猿界的小皮皮  
數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java?語言中提供的數(shù)組是用來存儲固定大小的同類型元素

前言:本文章主要講解數(shù)組的內(nèi)存圖,更好地掌握數(shù)組以及數(shù)組調(diào)用流程,話不多說開講。

1.數(shù)組內(nèi)存圖

1.一個數(shù)組的內(nèi)存圖

int[] arr = new int[3]; 		//剛開始定義數(shù)組arr為int型包含三位數(shù)字,初始化為0,0,0.
arr[0] = 12;  					//數(shù)組arr第一位被賦值12
arr[2] = 14;  					//數(shù)組arr第三位被賦值14
System.out.println(arr[0]);  	//12
System.out.println(arr[1]);  	//0
System.out.println(arr[2]);		//14
System.out.println(arr);		//[I@7852e922

解釋

如下圖:棧相當(dāng)于存放數(shù)組變量的地址,堆相當(dāng)于存放數(shù)組里面的元素而他們的下標(biāo)就相當(dāng)于房間號。

在這里我臨時定義arr的地址是0x001等同于[I@7852e922。

下面我開始介紹一下數(shù)組的調(diào)用流程 :

  • 第一步剛開始定義arr為int型數(shù)組變量放在棧里,數(shù)組里面的三個元素放在堆里并初始化為0,0,0。
  • 第二步分別把12,14賦值給arr[0],arr[2]。所以我們根據(jù)棧的地址0x001去堆里找到相應(yīng)的地址,找到房間號0、2并把12、14放到相應(yīng)的房間號。這樣數(shù)組第一位為12,第三位為14。
  • 第三步輸出數(shù)組元素以及數(shù)組的地址。這個就很簡單啦!從棧里找到數(shù)組arr的地址去堆里調(diào)用相應(yīng)數(shù)組的元素。

調(diào)用完成之后,棧和堆里的數(shù)據(jù)就會消失。

看懂了一個數(shù)組內(nèi)存圖,下面幾個就會看懂啦。

2.兩個數(shù)組的內(nèi)存圖

int[] arr1 = new int[]{23,12,5}; //一開始就初始化為23、12、5。
System.out.println(arr1[0]); //23
System.out.println(arr1[1]); //12
System.out.println(arr1[2]); //5
System.out.println(arr1);    //0x001
arr1[0] = 13;  //把13賦值給arr1第一位。
System.out.println(arr1[0]);  //13
int[] arr2 = {14,18,15};    //與上面同理
System.out.println(arr2[0]); //14
System.out.println(arr2[1]); //18
System.out.println(arr2[2]); //15
System.out.println(arr2);    //0x002
arr2[1] = 12;   //賦值給arr2第二位為12
System.out.println(arr2[1]); //12
  • 這個與第一個數(shù)組不同的是數(shù)組里面的元素全部被初始化賦值。
  • 流程都一樣,都是先通過棧找到數(shù)組地址根據(jù)地址去堆尋找相應(yīng)數(shù)組元素。
  • 當(dāng)數(shù)組arr1運行完后會退出棧和堆,給arr2讓出內(nèi)存空間。也就是說arr1運行完后會消失于內(nèi)存,arr2數(shù)組進入內(nèi)存進行操作。
  • 這兩個數(shù)組的地址不一樣。

3.一個變量兩個數(shù)組容器的內(nèi)存圖

int[] arr = new int[3];		//定義一個int型的arr數(shù)組,包含三個元素初始化為0。
System.out.println(arr[0]);  // 0
arr[0] = 3;					 
System.out.println(arr[0]);	 //3
System.out.println(arr);     //0x001
arr = new int[5];         	//重新賦值int型的arr數(shù)組,包含5個元素初始化為0,并且數(shù)組地址也相應(yīng)改變。
System.out.println(arr[0]); // 0
arr[0] = 5;
System.out.println(arr[0]); // 5
System.out.println(arr);    //0x002     如果不明白看下圖
  • 這個與其他兩個案例不同的是把兩個數(shù)組都指向同一個變量,這就相當(dāng)于往同一個杯子先放入清水然后把水喝光再放入飲料。
  • 這兩個數(shù)組跟杯子是同一個道理,當(dāng)arr =new int[3]執(zhí)行完后會被 new int[5]數(shù)組元素所覆蓋。所有的數(shù)組元素和地址會改變。
  • 執(zhí)行流程跟我講的第一個案例一樣。

4.兩個變量指向一個數(shù)組容器的內(nèi)存圖

int[] arr1 = new int[3];		//定義一個int型的arr數(shù)組,包含三個元素初始化為0。
System.out.println(arr1[0]);	//0
arr1[0] = 12;
System.out.println(arr1[0]);	//12
System.out.println(arr1);		//0x001
int[] arr2 = arr1;				//把arr1變量賦值給arr2
System.out.println(arr2[0]);	//12
arr2[0] = 13;
System.out.println(arr2[0]);	//13
System.out.println(arr2);		//0x001
System.out.println(arr1[0]);	//13
  • 這個案例與上一個案例不同的是這個案例是兩個變量指向同一個數(shù)組,就相當(dāng)于原本給你發(fā)順豐快遞,后來給你改發(fā)為圓通快遞,但是收件人依舊是你,地址也不會發(fā)生改變。
  • 所以arr1賦值給arr2,里面的元素與數(shù)組地址都不會改變。
  • 最后程序輸出arr1[0]的值實際上是arr2[0]的值。

相關(guān)文章

  • IDEA實現(xiàn)JDBC的操作步驟

    IDEA實現(xiàn)JDBC的操作步驟

    JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,本文給大家介紹IDEA實現(xiàn)JDBC的操作步驟,感興趣的朋友一起看看吧
    2022-01-01
  • java(swing)+ mysql實現(xiàn)學(xué)生信息管理系統(tǒng)源碼

    java(swing)+ mysql實現(xiàn)學(xué)生信息管理系統(tǒng)源碼

    這篇文章主要分享了java mysql實現(xiàn)學(xué)生信息管理系統(tǒng)的源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Mybatis-Plus處理Mysql?Json類型字段的詳細(xì)教程

    Mybatis-Plus處理Mysql?Json類型字段的詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于Mybatis-Plus處理Mysql?Json類型字段的詳細(xì)教程,Mybatis-Plus可以很方便地處理JSON字段,在實體類中可以使用@JSONField注解來標(biāo)記JSON字段,同時在mapper.xml中使用json函數(shù)來操作JSON字段,需要的朋友可以參考下
    2024-01-01
  • Java中List集合按指定條件排序

    Java中List集合按指定條件排序

    這篇文章主要介紹了Java中List集合按指定條件排序,List是一種有序集合,可以隨時添加和刪除其中元素,本篇文章針對List集合按照條件排序的幾種方式做了實例演示,需要的朋友可以參考下
    2023-07-07
  • Mybatis-plus如何開啟二級緩存

    Mybatis-plus如何開啟二級緩存

    這篇文章主要介紹了Mybatis-plus如何開啟二級緩存問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • idea配置全局變量Jdk、maven倉庫以及maven詳解(全文圖解)

    idea配置全局變量Jdk、maven倉庫以及maven詳解(全文圖解)

    這篇文章主要給大家介紹了關(guān)于idea配置全局變量Jdk、maven倉庫以及maven的相關(guān)資料,在配置JDK和Maven之前,需要確保已經(jīng)正確安裝了JDK和Maven,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 通過xml配置SpringMVC注解DispatcherServlet初始化過程解析

    通過xml配置SpringMVC注解DispatcherServlet初始化過程解析

    這篇文章主要為大家介紹了通過xml配置SpringMVC注解DispatcherServlet初始化過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • springboot 2.x整合mybatis實現(xiàn)增刪查和批量處理方式

    springboot 2.x整合mybatis實現(xiàn)增刪查和批量處理方式

    這篇文章主要介紹了springboot 2.x整合mybatis實現(xiàn)增刪查和批量處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服務(wù)框架中的服務(wù)注冊和發(fā)現(xiàn)組件,用于幫助開發(fā)者輕松地構(gòu)建和管理微服務(wù)應(yīng)用,這篇文章主要介紹了Spring Cloud Nacos 和 Eureka區(qū)別,需要的朋友可以參考下
    2023-08-08
  • java實現(xiàn)字符串匹配求兩個字符串的最大公共子串

    java實現(xiàn)字符串匹配求兩個字符串的最大公共子串

    這篇文章主要介紹了java實現(xiàn)求兩個字符串最大公共子串的方法,詳細(xì)的描述了兩個字符串的最大公共子串算法的實現(xiàn),需要的朋友可以參考下
    2016-10-10

最新評論

正阳县| 灌阳县| 吉林省| 逊克县| 凯里市| 团风县| 玉屏| 迁西县| 公主岭市| 枣庄市| 双峰县| 鄱阳县| 上栗县| 天镇县| 环江| 石景山区| 广南县| 莱阳市| 平遥县| 乌拉特中旗| 赤峰市| 清徐县| 西林县| 衡山县| 新乡县| 疏附县| 黔东| 洪泽县| 绿春县| 都昌县| 鄂伦春自治旗| 克什克腾旗| 江北区| 石嘴山市| 长垣县| 三江| 罗源县| 来宾市| 瑞丽市| 鲜城| 恩施市|