1.数组初始化
1.1 静态初次化:指定数组每个元素的值,由系统决定数值长度。
String[] book=new String[]{"java","c++","python"};
1.2动态初始化话:初始化时指定数组长度,系统自动分配初始值。
String[] book=new String[10];
2.数组变量和数据对象的区别
2.1先思考以下的代码
person[] per=new person[2];
//赋值
per[0]=new person("小明",12);
per[1]=new person("小红",22);
person myperson=per[0];
//输出myperson的值
myperson.toString(); //值是什么?
//改变赋值
per[0].setName("张三");
//输出myperson的值
myperson.toString(); //值是什么?
两次输出是否相等。
接下来再看一段代码
//建立一个int[] 数组并初始化
int[] array={1,2,3,4,5};
int k=array[2];
int o=30;
array[4]=o;
//输出
System.out.println("k="+k+" o="+o+" array="+Arrays.toString(array));
//改变赋值
array[2]=20;
System.out.println("k="+k); //K的值是什么 改变了吗
//改变赋值
o=40;
System.out.println("array[4]="+array[4]); //array[4]是什么 改变了吗
输出结果
name=小明 age=12
name=张三 age=12
k=3 o=30 array=[1, 2, 3, 4, 30]
k=3
array[4]=30
两段代码,刚好可以解析数组变量和数组对象的区别。
- 数组变量:其实可以用变量来理解,例如int i 这个i就是个int变量而已。他就像是C语言的指针一样,当作是一个指针,其他本身并没有值。他是一个指引,指向存储这个值的地方的地址。
- 数据对象:相当于new 一个空间。数据就是放在这个内存空间里面(堆内存)。
但是java程序无法直接处理这个内存空间。要通过数组变量来调用这个空间。 - 这就解析了:
- 为什么per[0]的值改变,myperson的值也改变呢?那是因为,myperson跟per[0]所指向的内存空间是一样的,因此内存空间的值改变了,他们所显示的值也都变了。
- 那为什么o的变量改变了,而array[4]的值没有变呢?他们内存空间不是一样的吗?这就涉及到基本变量的问题了,在方法声明的变量属于局部变量,保存在栈中,而数据元素则作为数据对象的一部分,保存在栈之中。所有他们的内存空间不一样。因此在赋值过程中,只是赋值,并没有改变他们的指引噢。
小结
要理解好数组变量和数据对象的关系,联系上基本数据类型来理解。
网友评论