java⼆维数组两种初始化⽅法
写这篇博客的原因是因为从⼤⼀学习c语⾔开始 就对⼆维数组的声明 和初始化 ⼀直没有搞懂。。。。直到学到了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. 静态初始化的存储⽅式java定义一维数组并赋值
int [][]a = {{},{},{}};
int a[][] = {{1,2},{3,4,5},{}};
2.动态初始化的存储⽅式
*2-1
*2-1 int [][]a = new int[3][];
该代码定义了⼀个变量为a的⼆维数组,这个数组变量指向了⼀个长度为3的的数组,这个数组中每个元素都是⼀个int类型的数组,所以默认值为null
*2-2
*2-2 int [][]a = new int[3][2];
该代码定义了⼀个a数组变量,这个数组变量指向⼀个长度为3的数组,这个数组的元素⼜是⼀个数组类型,它们各指向对应长度为2的int[]数组,每个数组元素的值为0。
以上分析的代码验证如下
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("");
}
}
}
输出结果如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论