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

     一.

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

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

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

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

     

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

    最终的结果如下

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

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

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

     

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

     

  • 相关阅读:
    关于bool operator() 几种变种实现的整理
    C# 访问修饰符
    C# 运算符
    c# 集合、存储及排序、迭代
    【并查集】tree
    【最大流】【POJ1149】PIGS
    【拆边最小费用流】【Asia Harbin 2010/2011】【Transportation】
    【DP】【GG选题】
    【DP】【芝麻开门】
    【搜索】【2012 Dhaka Regional】E Poker End Games
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7644410.html
Copyright © 2011-2022 走看看