java中的数组
在java中数组可以看做是一种类型,一种引用类型
语法格式定义,支持两种语法格式,推荐第一种,第二种更偏向是为了方便C++程序员的习惯。注意定义数组时不能指定数组长度。
int[] arrayname;
int arrayname[];
// 数组在java中是一种引用变量,方便理解的话,更好的是使用第一种方式
// 而因为仅仅是定义了一个引用变量,所以,定义数组时不能指定数组长度,这是与C++非常不一样的地方
- 数组初始化:数组需要初始化之后才能使用,注意动态初始化时由系统分配初始值,系统按照如下规则分配初始值
基本类型:byte,short,int,long: 0
基本类型:float,double:0.0
基本类型:char:'\u0000'
基本类型:boolean:false
引用类型:null
Java编译器不允许指定数组的大小。因为声明数组的时候只是获得了这个数组的引用,但是并没有为数组对象本身分配内存空间。这和C++不同:C++在声明的时候就要指定数组的大小,并将数组名指向内存位置。正是因为这个原因,C++数组可以不用初始化就可以应用(虽然得到的数值完全是随机的),而Java数组在访问前必须要首先初始化,因为Java在数组初始化的时候才给数组对象分配内存空间。
// 静态初始化:初始化显式指定数组元素初始值,系统决定数组长度
int[] intarr;
intarr = new int[]{5,6,8,7,9};
int[] intarr2 ={5,6,8,7,9,10};
//动态初始化:初始化时指定数组长度,由系统分配数组初始值
int[] intarr3 = new int[5];
Object[] object = new String[4];
foreach循环,更适合遍历数组和集合,注意如果要是相对数组中的元素进行赋值或者改变,则不能使用foreach循环,因为foreach中的变量是一个临时变量,系统依次将数组元素赋给这个元素,这个临时变量并不是数组元素。
多维数组:数组元素的内容可以是引用类型,如果想扩展到三维,到更高维度的数组,建议定义Object[] 类型的数组
int [][] array;
array = new int[4][]; // 定义一个维度的大小
for(int i11=0;i11<array.length;i11++) {
System.out.println(array[i11]); // 输出全为null
}
array[0]= new int[2];
array[0][1] = 6;
for(int j =0;j<array[0].length;j++) {
System.out.println(array[0][j]); //输出 0,6
}
// 一次指定数组每一维度的大小
int [][]arrayb = new int[4][3];
- 增强工具类:Arrays类包含了相关静态方法用于实现更好的数组操作。
C++中的数组:Java & C++ 数组声明和使用语法对比
- 一维数组
静态:int array[100]; 定义了数组array,并未对数组进行初始化
静态:int array[100] ={1,2}; 定义并初始化数组array
动态:int *array = new int[100]; delete []array; 定义数组并分配了长度100数组
动态:int *array = new int[100](1,2);初始化了前两个元素
- 二维数组
静态 int array[10][10]; 定义了数组,并未初始化
静态 int array[10][10] = { {1,1} , {2,2} }; 数组初始化了array[0][0,1]及array[1][0,1]
动态 int (*array)[n] = new int[m][n]; delete []array;
动态 int** array = new int*[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; 多次析构
动态 int* array = new int[m][n]; delete []array; 数组按行存储
- 数组初始化
C++中初始化数组可以简单的理解为有三种形式。举例如下
int numStu[3];
int numStu[3] = {41204041,41204043,41204044};
int numStu[3] = {41204041};
int numStu[] ={41204041,41204043,41204044};
- 第1个完全没有初始化数组,知识为数组名指向了一段内存位置,数组元素包含上次使用这些内存位置的程序遗留下来的值。
- 第2中和第3种是一种类型。只是第2个完全初始化,第3个部分初始化而已。初始化数组的的数值不能比数组的元素多,否则将会报错。如果少,即为部分初始化,那么列表中的初始值被分配给从第一个元素开始的连续元素。没有得到初始值的数组元素初始化为0。
- 第4种省略掉数组的长度,同时提供初始值,那么数组元素的数量就由指定的初始值的数量决定。如上面的第4个数组的数量就是3。