Java数组的学习

    首先,数组是一种顺序存储的数据结构,基本的顺序存储数据结构包含数组和链表,数组是物理连续的,链表是逻辑连续的。数组的基本操作:插入、删除、查找,数组中的每个元素都有索引,可以通过索引直接访问某个数组元素。

    Java语言中,一个数组中的元素必须是同一个类型的,因为Java语言有继承的概念,这样可能产生数组中有不同类型的元素的错觉,例如数组【人类】里的元素,可以是男人,也可以是女人,而男人和女人是不同类型的,但是因为男人和女人都是人类,所以可以放在【人类】数组中。

    PS:int[] a = new int[5];//这是动态初始化,由程序员决定长度,初始值由系统决定。

           int[] a = new int[]{1,2,3};//这是静态初始化,程序员决定初始值,系统决定数组长度。

    实际上,数组的完整初始化过程分为三步。第一步,在堆里new一个数组对象,第二步,建立一个数组对象的引用,第三步,将数组引用指向数组对象。其中,第一步才是真正的初始化过程,换句话说,我们在定义一个数组引用时,不能指定数组的长度,因为这个数组引用还没有指向一个有效的数组对象,还不能被使用。那么,是不是数组必须被初始化后才能使用?答案是是的。但是,请先理解初始化的概念:不是对数组变量进行初始化,而是在堆内存上创建数组对象。如果有以下代码,数组b是可以正常使用的
            int[] a = new int[]{1,2,3};

            int[] b = a;//此时未初始化数组变量b

       因为b变量指向了一个已经初始化完毕的数组对象,符合上述所说的完整初始化过程,所以可以使用。

    在一个方法中,数组引用会随着方法体的结束而被直接销毁,数组对象则不会,这是因为数组对象在堆内存,有可能这个数组对象被别的方法体中的数组引用所引用,所以对象不会随着方法的结束而被销毁,哪怕是在这个方法中new的。(可能作为参数传给别的方法使用)

    基本数据类型数组:数组元素的值直接存在对应的数组元素上。例如:int[]  char[]

    引用数组类型数组:数组元素里存储的还是引用。这个引用指向另一块内存,里面存有效数据。例如:String[] User[]

猜你喜欢

转载自my.oschina.net/u/3733854/blog/1587553