java之数组
定义数组
int[] a; //这条语句仅仅声明了int[]类型的a,没有给a初始化
int[] a = new int[100]; //分配100个int给a,所有的字符串为null,可以使用a.length访问元素个数
c++中使用: int *a = new int[100]; //无法使用a.length访问元素个数,没有下异常安全
也可以这样初始化
int[] a = {1,2,3,4}; //不需要调用new,这种语法就会创建新的空间然后赋值
c++中使用:int[] a = {1,2,3,4};//但是c++中是在栈上分配空间,java中是在堆中
也可以
int[] a = new int[] {1,2,3,4}; //创建匿名数组,然后初始化进行赋值给另一个数组
方法
static String toString(type[]a);返回a中的字符串,用,隔开
多维数组
不同于c++,java的多维数组是可以不同维度的
在java中定义二维数组是 int[][] a = new int[4][6];
int[][] a = {
{16, 3, 2, 13},
{5, 10, 11, 8},
(9, 6, 7, 12},
{4, 15, 14, 1}
};
c++中是
int[][] a = {
{16, 3, 2, 13},
{5, 10, 11, 8},
(9, 6, 7, 12},
{4, 15, 14, 1}
};
int(*p)[6] = new int[4][6];
c++中数组每一维必须是规则的,java则不是
不规则数组
int[][] a = new int[4][];
a[1] = new int[3];
a[2] = new int[4];
在java中这样就实现了不规则
内部中java int[][] a = new int[4][6];
不同于 c++ int[][] a;//在栈上
不同于c++ int(*a)[] = new int[4][6];
而是 int**a = new int*[4];
然后每个成员再赋值new的地址
说明
一旦创建数组,大小就不可以改变,这点和c++一样
当访问下标超过length,java会抛出异常,c++不会
java定义数组都是在堆空间内存,c++中有栈和堆两种方式
注意的是当你一个数组变量赋值给另一个数组变量之后,两个数组指向的是同一片区域,任意一个变量修改数组将导致另一个数组变量的值更改,因为就是同一个值,如果你想要值赋值,那么可以主动调用static type copyOf(type[]a, int length)
上面说的这个问题本质就是c++中的浅拷贝和深拷贝,只不过java中都是类似c++的指针
一个圆,圆内是你会的,圆外是你不知道的。而当圆越大,你知道的越多,不知道的也越多了

浙公网安备 33010602011771号