zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第六章-二维数组-定义方式内存图解

    一.

    接下讨论数组中特殊的一部分。数组是一个容器,用来存储数据的。现在数组中存储的不再是int,double..的类型了,而是存储的数组。

    数组中的元素还是数组,我们把它称之为数组中的数组,也就做二维数组。维度增加了一层。

    二维数组的基本定义

    (这个数组里面存放的还是数组)→(最里面装的是int类型元素)

    这就是定义了一个二维数组,但是数组需要长度,里面有几个一维数组。

    这个代表着有三个小箱子,每个小箱子里有两个小格子。这个书写的形式挺奇怪的。

    对二维数组的定义的理解:先通过new创建一个数组new [],接着数组中装的元素也是数组new [][],数组里装的数组里面的元素是int类型,new int[][],然后每一个数组都有固定的长度。二维数组要明确数组里面装了几个数组,每个数组里有几个元素,new int[3][2]。为了操作创建好的数组,给它命名arr=new int[3][2], 名字叫arr的变量是什么类型?元素为int类型的二维数组类型 int [][] arr=new int[3][2]。

    这里还有一点要注意的就是格式问题,数组的符号[]可以移动,三种写法都可以,int[][] arr,int[] arr[],int arr[][]。

    二. 二维数组的应用

    打印二维数组是什么样的?

     

    对于二维数组而言,arr[0]代表的是二维数组里的第一个一维数组。

    现在我们想操作二维数组中的第一个一维数组里的0角标元素。

    连续两个数组符号[],它们分别代表的含义是不同的。第一个数组符号[]代表的是第几个一维数组,第二个数组符号里面的数字代表的是某个一维数组中的第几位元素。arr[0][0]代表的是二维数组中第0位数组中的第0位元素。

    这里有一点,二维数组的输出arr[0]打印出来的内容是什么样的

    先介绍二维数组在内存中的图解。

    首先,arr在函数中,属于局部变量,在栈中。右边式子中有new新建的数组,因此其在堆中开辟内存空间。之所以两者分开了存储,就在于它们之间是一个引用的关系,和直接用常量赋值变量int a=4的方式不一样,堆中的对象是靠的编号的,它把编号给栈中的变量,靠这个编号两者之间搭上关系。

    对于二维数组的分析是一步步来的,以new int[3][2]为例,先明确二维数组的长度,二维数组的长度为3,上面截图中的虚线格子代表就是一维数组,0,1,2代表的是二维数组的长度是3,每一个里面角标里面都是一个一维数组。

      

    上面的截图体现了二维数组在内存中分布的意思,但是这么画是错误的。开辟一个空间出来,0是由默认初始化的值,那这里面是什么?它这里本身就应该存数组,如果没有数组,应该存什么?(),因为数组是实体,当没有实体时 ,引用型数据类型的默认值就是null(代表着没有任何指向)。int类型的默认值是0,double默认值是0.0。

    任何一个实体,在堆内存中产生,它里面的数据都会进行默认初始化。这是系统自动完成的。接着问题就来了,一维数组在哪儿?

    一维数组也是个实体,是要是实体,都要在堆内存中开辟空间,所以一维数组也要自己独立的开辟一个内存空间,同时分配了一个地址空间。接着把这个地址空间送入对应的位置。

       

    上面的右侧截图后,二维数组才真正的初始化完毕。紧接着二维数组把地址给arr,然后arr就可以指向二维数组。

  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7643392.html
Copyright © 2011-2022 走看看