java二维数组两种初始化方法[通俗易懂]

java二维数组两种初始化方法[通俗易懂]写这篇博客的原因是因为从大一学习c语言开始就对二维数组的声明和初始化一直没有搞懂。。。。直到学到了Java依旧搞得不是很清楚。先看一道Java的基础题这道题错误的选项是B.二维数组的初始化的两种方式看了很多网上的博客,大部分都说是三种初始化的方式,我这里将其归为两种,有不同想法的小伙伴可以留言讨论。什么是二维数组:数组是一个容器,用来存储数据的。现在数组中存…

大家好,又见面了,我是你们的朋友全栈君。

写这篇博客的原因是因为从大一学习c语言开始 就对二维数组的声明 和初始化 一直没有搞懂。。。。直到学到了Java依旧搞得不是很清楚。

先看一道Java的基础题

java二维数组两种初始化方法[通俗易懂]

这道题 错误的选项 是 B.

二维数组的初始化的两种方式

看了很多网上的博客,大部分都说是三种初始化的方式,我这里将其归为两种,有不同想法的小伙伴可以留言讨论。

什么是二维数组:

数组是一个容器,用来存储数据的。现在数组中存储的不再是int,double..的类型了,而是存储的数组。

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

简单的来说二维数组  就是元素为一维数组的数组。

 

二维数组的第一种初始化方式(静态初始化):

静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度

*1-1    int k[][] = {
  
  {},{},{},{}};

int a[][] = {
  
  {1,2,3},{4,5,6},{7,8,9,10}};
int b[][] = {
  
  {},{2},{},{3,5}};
直接赋值,二维数组k内层的每一组大括号就是一个一维数组。有几对大括号那么k数组就有几个一维数组

例如二维数组a 中 有三个一维数组,第一个与第二个一维数组中数组长度为3  第三个一维数组长度为4

可以尝试输出其中具体某个一位数组的长度 
System.out.println(a[1].length);   //3
System.out.println(b[2].length);  //0

二维数组的第二种初始化方式(动态初始化):

动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。 

第二种初始化方式  int [][]k = new int[i][j];

*2-1    int [][]m = new int[3][];
*2-2    int [][]n = new int[3][2];

第二种初始化方式
对于二维数组k来说   i这个位置必须赋值,而j 这个位置 可以赋值 也可以空着不赋值。
所以就导致了2-1  与2-2  这两种不同的赋值方式。
文章后面会从内存分配的角度来赘述这2-1与2-2的区别

 

 

深入数组 

(一)定义: 
1、数组是编程语言中最常见的一种数据结构,可用于存储多个数据。 
Java的数组要求所有的数组元素具有相同的数据类型。

2、数组是一个引用数据类型,数组的变量只是一个引用,数组元素和数组变量在内存里是分开存放的。

(二)初始化

1、静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。

2、动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

指定初始值时,系统按如下规则分配初始值:

类型  初始值
byte、short、int、long 0

float、double    0.0

char    ‘\u0000’

boolean false

类、接口、数组 null

(三)数组在内存中存储

1. 静态初始化的存储方式

int [][]a = {
  
  {},{},{}};

 

java二维数组两种初始化方法[通俗易懂]

 

 

int a[][] = {
  
  {1,2},{3,4,5},{}};

java二维数组两种初始化方法[通俗易懂]

 

 

2.动态初始化的存储方式

*2-1

*2-1    int [][]a = new int[3][];

该代码定义了一个变量为a的二维数组,这个数组变量指向了一个长度为3的的数组,
这个数组中每个元素都是一个int类型的数组,所以默认值为null

 

java二维数组两种初始化方法[通俗易懂]

 

 

 *2-2

*2-2    int [][]a = new int[3][2];

该代码定义了一个a数组变量,这个数组变量指向一个长度为3的数组, 
这个数组的元素又是一个数组类型,它们各指向对应长度为2的int[]数组, 
每个数组元素的值为0。

java二维数组两种初始化方法[通俗易懂]

以上分析的代码验证如下

public class TestArray {

	public static void main(String[] args) {
		System.out.println("**********验证 静态初始化 二维数组*****************");
		int a[][] = {
  
  {},{},{}};
		System.out.println(a);
		System.out.println(a[0]);
		System.out.println(a[1]);
		System.out.println(a[2]);
		for (int[] is : a) {
			for (int is2 : is) {
				System.out.print(is2 + " ");
			}
			System.out.println("");
		}
		//System.out.println(a[0][0]);  //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
		
		System.out.println("--------------------");
		int b[][] = {
  
  {1,2},{},{3,4,5}};
		System.out.println(b);
		System.out.println(b[0]);
		System.out.println(b[1]);
		System.out.println(b[2]);
		for (int[] is : b) {
			for (int is2 : is) {
				System.out.print(is2 + " ");
			}
			System.out.println("");
		}
		
		
		System.out.println("**********验证 动态初始化 二维数组*****************\"");
		System.out.println("**********2-1***********");
		int c[][] = new int[3][];
		System.out.println(c);
		System.out.println(c[0]);
		System.out.println(c[1]);
		System.out.println(c[2]);
		
		//Exception in thread "main" java.lang.NullPointerException
//		for (int[] is : c) {
//			for (int is2 : is) {
//				System.out.print(is2 + " ");
//			}
//			System.out.println("");
//		}
		
		
		System.out.println("**********2-2***********");
		int d[][] = new int[3][2];
		System.out.println(d);
		System.out.println(d[0]);
		System.out.println(d[1]);
		System.out.println(d[2]);
		for (int[] is : d) {
			for (int is2 : is) {
				System.out.print(is2 + " ");
			}
			System.out.println("");
		}
			
	}
}



输出结果如下 

**********验证 静态初始化 二维数组*****************
[[I@15db9742
[I@6d06d69c
[I@7852e922
[I@4e25154f



--------------------
[[I@70dea4e
[I@5c647e05
[I@33909752
[I@55f96302
1 2 

3 4 5 
**********验证 动态初始化 二维数组*****************"
**********2-1***********
[[I@3d4eac69
null
null
null
**********2-2***********
[[I@42a57993
[I@75b84c92
[I@6bc7c054
[I@232204a1
0 0 
0 0 
0 0 

 

https://blog.csdn.net/lxf512666/article/details/52819906

https://blog.csdn.net/qijingwang/article/details/83620602

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132047.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月11日 下午1:16
下一篇 2022年6月11日 下午1:36


相关推荐

  • AutoGen智能体开发:autogen_ext.agents.magentic_one包

    AutoGen智能体开发:autogen_ext.agents.magentic_one包

    2026年3月16日
    2
  • 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇

    基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇说明首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的。最后还被评为优秀毕业设计,虽然并没有什么luan用,但是,马上毕业了,还是挺让人怀念的。整个资料从第一篇博客说起就说会全部开源的,期间承蒙各位朋友的支持,给与资助,在此感谢了。虽然资料中私人信息删除了一些,但是不免有疏漏,所以有关个人信息还挺各位删除掉,小

    2022年4月8日
    45
  • CIDR合并Java_CIDR

    CIDR合并Java_CIDR9 12 网络地址函数和操作符 IP 网络地址类型 cidr 和 inet 支持表 9 1 中的比较运算符 同时也支持表 9 38 及 9 39 中列出的特殊操作类型和函数 cidr 值可隐式转换为 inet 因此 凡事 cidr 可用的操作符和函数 inet 均可用 当然也可将 inet 转换为 cidr 此时子网掩码会转为 0 MAC 地址类型 m 对物理网络进行子网划分的好处包括减少网络流量 优化网络性能 简化管理 以及有助于覆盖大规模

    2026年3月19日
    2
  • 浅谈ArrayList扩容机制

    浅谈ArrayList扩容机制ArrayList 是 List 接口的实现类 它是支持根据需要而动态增长的数组 java 中标准数组是定长的 在数组被创建之后 它们不能被加长或缩短 这就意味着在创建数组时需要知道数组的所需长度 但有时我们需要动态程序中获取数组长度 ArrayList 就是为此而生的 因此 了解它的扩容机制对使用它尤为重要 首先了解 ArrayList 的几个成员变量 默认的初始容量 privatestati CAPACITY 10 定义一个空的数组实例以供其他需要用到空数组

    2026年1月27日
    3
  • 两分钟学会在GitHub托管代码

    两分钟学会在GitHub托管代码本篇博客针对不会 Git 的小童鞋 大神们可以绕过 错误之处谢谢指正 关于 GitHub 的强大此处不在说明 知道 GitHub 也有一段时间了 但是一直苦于不会使用 本篇文章介绍的是如何将工程代码托管到上面 如果你还没注册 GitHub 账号请到 https github com 上注册如果你已经注册 GitHub 账号 在你的电脑上安装了 GitHub 而一直还没上传过代码 1 打开浏览器登

    2026年3月19日
    3
  • 使用PyCharm快速安装TensorFlow

    使用PyCharm快速安装TensorFlow本来之前写的《使用VirtualEnv在Mac安装TensorFlow》已经搭建好TensorFlow学习环境了,后来发现使用PyCharm搭建TensorFlow学习环境简直不要太方便了,就重新搭建了一遍!启动PyCharm,创建一个新项目,选择Newenvironmentusing->VirtualEnv,这样就是单独为新项目创建一个隔离的python环境。创建好新项目以后…

    2022年8月27日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号