Java中的数组
首先,不要把Java中的数组单纯的看成一个数据集合,应该把数组看出一个对象,因为Java中万物皆对象,既然是对象,就可以调用一些方法。
一维数组
初始化分为动态初始化和静态初始化。
动态初始化: 数据类型[ ] 数组名字 = new 数据类型[数组长度]; 静态初始化: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…}; 无论是静态初始化还是动态初始化,数组长度一旦定义之后就不能改变了。
并且执行new操作的时候,和所以实例化对象一致,是在堆内存分配对应的内存大小。=号前面只是在栈内存声明一个变量名,这个变量指向了堆内存中的地址。
二维数组
同样的也分为动态初始化和静态初始化。 动态初始化: 数据类型[ ][ ] 数组名字 = new 数据类型[数组长度][数组长度]; 静态初始化: 数据类型[] 数组名 = new 数据类型[]{ {元素1,元素2,元素3}, {元素4,元素5,元素6},… }; 下面是一个二维数组例子的代码
public class test1 {
public static void main(String[] args)
{
int [][] cords={
{1,2,3},
{4,5,6}
};
int i,j;
for (i=0;i< cords.length;i++)
{
for (j=0;j<cords[i].length;j++)
{
System.out.print(cords[i][j]+" ");
}
System.out.println();
}
}
}
数组中的内存分配
讲到这个,首先Java数据类型分为基本数据类型和类类型。 如果没有对数组进行初始化,则声明数组之后,数组会有默认值 如下 一维数组中, 数据类型[ ] 数组名字 = new 数据类型[数组长度];这条语句执行后,堆内存会开辟对应的内存空间,栈内存也会有对应大小的数组分别指向对应堆内存。 二维数组中 int [ ][ ] a = new int[3][2]; 二维数组我们看成数组嵌套数组,所以首先堆内存有一个长度为三的数组内存,然后每一个都指向了堆内存中长度为2的数组,栈内存中还是和一维数组一样,所以总的来说和一维数组不同的是,堆内存中的内存又指向了堆内存中的另一个内存地址。 如果数组类型为类的话,其实内存分配方面和二维数组方式上一样, 堆内存又指向了堆内存中的另一块地址,表面是实例化的类的一个对象, 例如如下
public class test3 {
String color;
char size;
test3(String color,char size)
{
this.color=color;
this.size=size;
}
public static void main(String[] args)
{
int i;
test3[] a={new test3("red",'大'),new test3("yellow",'小')};
System.out.println("a数组 改变前");
for(i=0;i<a.length;i++)
{
System.out.println(a[i].color+" "+a[i].size);
}
test3[] b=new test3[a.length];
for(i=0;i<a.length;i++)
{
b[i]=a[i];
}
System.out.println("b数组 改变前");
for(i=0;i<a.length;i++)
{
System.out.println(a[i].color+" "+a[i].size);
}
a[1].color="blue";
System.out.println("a数组 改变后");
for(i=0;i<a.length;i++)
{
System.out.println(a[i].color+" "+a[i].size);
}
System.out.println("b数组 改变后");
for(i=0;i<a.length;i++)
{
System.out.println(a[i].color+" "+a[i].size);
}
test3[] c=new test3[a.length];
}
}
|