javase二维数组笔记

二维数组

 

数组,本身是引用类型的变量。

数组的元素,可以是基本数据类型,也可以是引用数据类型。 

如果有这样一个数组,数组中的每一个元素,都是一个一维数组,那么这个数组就是二维数组。

如何理解arra[x][y]能够访问到二维数组的元素?

  一维数组 int[] arra,  arra变量指向了这个一维数组(即arra中存放该数据的地址),规定,通过存放有数组地址的变量后面跟上“【x】”的形式(arra[x]),可以访问到数组中的元素。

  二维数组 int[][] arra

如果arra[x]访问到了,是一个一维数组的地址的话,我们就可以通过arra[x][y]的方式访问到二维数组中的元素

 

1.二维数组的声明与初始化

int[][] scores = null;

//静态初始化

scores = new int[][]{{50,60,70},{88,99},{66,87,98}};

//动态初始化1

String[][] names = new String[3][2];

//动态初始化2

boolean[] isGirl[] = new boolean[2][];

isGirl[0] = new boolean[3];

isGirl[1] = new boolean[]{false,true};

 

错误的初始化方式:

int[][] nums1 = new int[][4];

int[][] nums2 = new int[4][3]{{50,60,70},{88,99},{66,87,98}};

int[4][3] nums1 = new int[][];

 

2.如何引用二维数组元素:调用下角标的方式

names[0][1]

 

3.二维数组的属性:长度

System.out.println(scores.length);//3

System.out.println(scores[0].length);//3

System.out.println(scores[1].length);//2

 

4.遍历二维数组元素

 

  1. for(int i = 0;i < scores.length;i++){
  2. for(int j = 0;j < scores[i].length;j++){
  3. System.out.print(scores[i][j] + "\t");
  4. }
  5. System.out.println();
  6. }
 

 

 

5.二维数组元素的默认初始化值

//byte/short/int/long类型的二维数组的初始化元素为:0

//float/double类型的二维数组的初始化元素为:0.0

//char类型的二维数组的初始化元素为:'\u0000'

//boolean类型的二维数组的初始化元素为:false

//引用类型的默认初始化值为:null

 

 

 

6.二维数组的内存结构

执行如下代码发生了什么?

int[][] nums=new int[3][];

nums[0]=new int[3];

num[0][2]=5;

 

局部变量在栈中,new出来的对象,在堆中

(1)int[][] nums=new int[3][];

执行这条语句,会在栈中生成nums的变量,nums的值,是数组在堆中的地址0x2233(也就是nums指向堆中的一个数组),每一个元素的类型都是int[],是引用数据类型的,所以,初始化值为null

(2)nums[0]=new int[3]

这时,在堆中又生成一个int[]类型的数组,数组中的元素是int,所以初始化的值是0.

把int[]数组的地址(0x8899)赋值给nums[0],这时,nums[0]也就指向了新生成的一维数组

(3)num[0][2]=5

num[0]指向了一维数组,nums[0][2]就是改一维数组的第三个元素。

 

 

 

 
 
通过上面二维数组的内存结构,可以如下程序的执行结果
  1. int[][] nums1 = new int[3][];
  2. System.out.println(nums1);//地址值
  3. System.out.println(nums1.length);//3
  4. System.out.println(nums1[0]);//null
  5. int[][] nums2 = new int[3][2];
  6. System.out.println(nums2[0]);//地址值
  7. int[][] nums3 = new int[3][];
  8. //nums3[0] = new int[2];
  9. System.out.println(nums3[0][0]);//运行时报错
  10. 这是非常典型的错误,一定要注意,因为int3[0]的值是null,所以,不能通过之歌null值找到nums3[0][0]

转载于:https://www.cnblogs.com/lemonTOKEN/p/6842932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值