java中一维数组、二维数组的定义和使用

一维数组的定义:

//动态初始化
	int []a;
	int b[];
	int []c=new int [3];
	int d[]=new int [3];
	
	//通过下标赋值
	//a,b这种定义方式必须在使用前给a,b声明长度,否则编译会出问题:
	//(The local variable a may not have been initialized)。
	
	//静态初始化
	int aa[] = {1,2,3};
	int []bb = {1,2,3};
	
	System.out.println(Arrays.toString(aa));

通过debug看到int []a 和int b[] 这种方式定义后,并没有在产生其地址空间,也就是没有初始化吧。目前没有学到堆栈,老师简单的说了一下new出来的对象在堆中,而局部变量和对象引用(地址)在栈中。这可能就是堆中没有出现a的地址。为了验证一下,修改代码如下:

//动态初始化
	int []a=null;
	int b[];
	int []c=new int [3];
	int d[]=new int [3];
	
	//通过下标赋值
	//a,b这种定义方式必须在使用前给a,b声明长度,否则编译会出问题:
	//(The local variable a may not have been initialized)。
    b=c;
	//静态初始化
	int aa[] = {1,2,3};
	int []bb = {1,2,3};
	System.out.println(a);
	System.out.println(b);
	System.out.println(c);
	System.out.println(Arrays.toString(aa));
}

输出结果为

null
[I@6d06d69c
[I@6d06d69c
[1, 2, 3]

我认为这个就是堆中的地址,因为用b=c;使得b也指向 了c在堆中的内存地址,所以输出结果一样。一开始不解为什么int []a 可以初始化为null,本想a中是int类型的数据;-----------数组的引用类型,并不是基本类型更不是整型。所以可以定义为null,只不过a[?]数组中的内容是整型罢了。所以数组看做一个对象,是在堆中开辟空间的,所以可以初始化为null;(大概是这样吧?????????????)

==================================================================================================

接下来到了二维数组,定义如下:首先就是和一维数组一样,这样的定义可以说没什么意义。会报错,显示没有初始化。

public static void main(String[] args) {
	//语法    跟一维数组一样,这样定义后,想要使用必须定义其长度
		//否则就会报错。和一维数组一样。
	int [][] a ;
	int b[][];
	int []c[];
	
	System.out.println(a);
	}

然后还是类似一位数组验证,代码如下:(我理解的二维数组就是一个不标准的行列式,第一个[]代表行数,第二个代表列数,你也可以选择定义标准的比如 new int [3][4] ,也可以定义不标准的比如静态初始化 int [][] a = {1,2,3},{2,3},{2,3,4,5,6}})

//语法    跟一维数组一样,这样定义后,想要使用必须定义其长度
		//否则就会报错。和一维数组一样。
	int [][] a = null ;
	int b[][];
	int []c[];
	//动态初始化   以下的方式相当于全部初始化为0
	int [][]aa=new int [3][4];
	int bb[][]=new int [3][4];
	int []cc[]=new int [3][4];
	//通过下标可以去赋值
	System.out.println(aa);
	System.out.println(bb);
	System.out.println(cc);
    System.out.println(aa[0]);
	System.out.println(Arrays.toString(aa));
	System.out.println(Arrays.toString(aa[0]));
	System.out.println(a);
	}
	

输出的结果是

[[I@6d06d69c
[[I@7852e922
[[I@4e25154f
[I@70dea4e
[[I@70dea4e, [I@5c647e05, [I@33909752]
[0, 0, 0, 0]
null

前三行输出的是三个二维数组的地址,[[I@70dea4e, [I@5c647e05, [I@33909752]指代的应该就是二维数组aa中的三个一维数组aa[0]  aa[1]  aa[2];因为看到输出的aa[0]跟aa的第一个一样。想要输出aa[0]的内容时,输出的就是初始化好的[0,0,0,0];

下边写一种应该比较常用的定义方式

	
		//这种动态初始化的方式可以实现二维数组的不规则定义,
		//也就是说可以在每一个一维数组定义不同长度
		//此时的定义语法相当于定义了aa[0]=null;aa[1]=null;
		//aa[2]=null;而这三个一维数组合起来又是一个数组。
		int [][]aa=new int [3][];
		

	System.out.println(aa);
	System.out.println(Arrays.toString(aa));
	System.out.println(aa[0]);
	System.out.println(Arrays.toString(aa[0]));
	

输出的结果如下

[[I@6d06d69c
[null, null, null]
null
null

可以看到验证了我的注释,aa被初始化了,所以有地址,但是其中的一维数组相当于定义成了null。所以输出的内容都是null,其中一位数组的内容也都是null,地址也是null;

通过后期代码初始化使用,

//这种动态初始化的方式可以实现二维数组的不规则定义,
		//也就是说可以在每一个一维数组定义不同长度
		//此时的定义语法相当于定义了aa[0]=null;aa[1]=null;
		//aa[2]=null;而这三个一维数组合起来又是一个数组。
		int [][]aa=new int [3][];
		//可以通过这种方式将这个二维数组定义成
		//000
//		  0000
//		  00000 这样的二维数组
		aa[0] =new int [3];
		aa[1]=new int [4];
		aa[2]=new int [5];
		

	System.out.println(aa);
	System.out.println(Arrays.toString(aa));
	System.out.println(aa[0]);
	System.out.println(Arrays.toString(aa[0]));
	System.out.println(Arrays.toString(aa[1]));
	System.out.println(Arrays.toString(aa[2]));
	
	}

输出的结果如下

[[I@6d06d69c
[[I@7852e922, [I@4e25154f, [I@70dea4e]
[I@7852e922
[0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0, 0]

可以看到所有的内容都被初始化过了,就是全都默认值为0了, 然后地址也都开辟出来了。

如有指正,万分感谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值