JAVA-初步认识-第六章-二维数组-定义方式内存图解2

 一.

上一节,主要讨论的是二维数组在堆内存中如何分布的问题。

new int[3][2]这个语句明确了二维数组长度的同时,也明确了一维数组的长度。还有另外一中定义方式,new int[3][],明确了二维数组的长度,但是没有明确一维数组的长度。这就意味着没有要求说,一定要每一个一维数组的空间都是一样大的。

那么这样的定义方式,该怎么画其在内存中的分布呢?

在内存中画图一步步来。二维数组创建完毕后,就是赋值(赋值就是指向)。

 

接着执行第二句话,(右边运算完,才能把值赋给左边)。先是新建一维数组实体,然后赋值。

最终的结果如下

那么System.out.print(arr);打印的情况是怎样的?

如果直接打印一个引用型的变量,输出语句里面是记录数据,然后把数据放到控制台上。输出语句往外打印的全部都是字符串,

前面用输出语句直接输出arr,得到的是[ I@1fb8ee3值,它并不是输出数组中哪一个角标的值。哈希值,实体在内存中存储的位置,也可以理解为地址值。现在讨论二维数组。

 

下图接着变了一种情况,判断输出是怎样的。DOS在运行的时候,编译没有报错,运行出错了。由于没有确定一维数组,那么二维数组的初始化值都是空,也不存在后面有一个赋值什么的。拿一个空去操作数组角标里的元素,不太合适。凡是拿着引用型变量,没有任何实体指向,去操作实体,都会有这个结果

 

 

posted @ 2017-10-10 10:50  前锋营  阅读(240)  评论(0编辑  收藏  举报