声明:本人也是刚开始学Java不久,所以有什么不足之处,或者是有一些知识点上的误区请大家帮忙指点出来。谢谢了!
我在学数组这一章的时候有一些知识误区,所以今天想把自己总结的一些觉得比较重要东西写出来,以免初学者遇到同样的问题。
-------------------------------
数组,顾名思义,就是一组数据。并且是相同类型的一组数据。比如int,char等等一系列类型相同的数据组成。数组的定义方式如下:
int[] arr =new int[5];
int:数据类型
arr:数组名称
int[5]:其中的5是数组的长度
上述语句创建了一个如下数组
注意:该数组是一维数组,所以如果直接声明了长度而不赋值,那么每个位置的元素都默认为0。
定义数组的基本要点:
1.确切的数据类型。
2.数组名称
3.不能缺少[]
int[] arr = new int[5];
int arr[] = new int[5];
以上两种书写方式都是正确的。
而其中的new语句则是为了在堆中开辟了它自己的空间。
需要注意的是:如果将一个数组的地址赋给了另一个数组,那么它们便会有同一个所属的地址,它们无论其中任意一个数组发生变化,另一个也会随之而发生改变。
例: int[] arr1 = new int[3];
int[] arr2 = {1,2,3};
arr1 = arr2;
//这时候arr1的地址就变成了arr2的地址,并且其中的内容也发生了变化,变成了 1,2,3 。
接着上次还没有讲完的继续。
for(int i=0;i<arr1.length;i++){
arr1[i] = 1;
}
**//当arr1的值变化时,arr2的值也会随之改变,变得和arr1当中的数据一样。arr1和arr2的内容都变成了 1,1,1 。
之所以会变化是由于指向性的问题。这里就涉及到堆栈的知识了,这是非常重要的知识点。希望大家有空去了解一下。
当其基本类型确定之后,其元素的默认值分别为:byte,short,int,long默认值为0。boolean默认值为false。float,double默认值为0.0。
而在数组这章当中我认为最重要,又比较容易忽略的就是数组长度,和与之对应下标的关系。
其实也不难,只要记住:“下标从0开始,长度从1开始。”
举个例子吧,如果我们需要打印一个数组,这个数组的长度为3。如果我们这样写
for(int i=1;i<=arr.length;i++)
{
System.out.println(arr[i]);
}
那么绝对会报错,因为超出了它的原本长度,并且最后指向了一个为空的地方。![这里写图片描述](https://img-blog.csdn.net/20161205133324148)
大家看这个图就能够明白,下标和数组长度的对应关系。下标的数组长度为length-1(数组长度-1)。如果访问的下标超过了length-1,那么就会报错。**