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

 一.

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

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

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

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

 

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

最终的结果如下

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

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

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

 

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

 

 

转载于:https://www.cnblogs.com/wsw-bk/p/7644410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值