一、数组特点:
1)java是静态语言,因此java数组也是静态的,当数组被初始化之后,改数组长度是不可变的。
2)java程序中数组必须经过初始化才可使用(即给数组对象的元素分配内存空间,并赋初始值)。
3)数组可以存储基本数据类型和引用数据类型。
4)数组相比集合最大的优点就是随机访问速度非常快(一般情况下建议还是使用集合)。
5)多维数组可以看做是一维数组对数组对象引用变量的存储(多维数组效率较低)。
二、数组的两种初始化过程:
1.静态初始化:初始化时由程序员显示的指定每个数组元素的初始值,由系统决定数组长度。
2.动态初始化:初始化数组时由程序员指定数组长度,由系统为数组元素分配初始值。
package com.zlc.array; public class InitArrayDemo { public static void main(String[] args) { //静态初始化数组(简化形式) String[] names = { "张三","李四","王五","赵六" }; //静态初始化数组(一般形式) String[] names2 = new String[]{ "刘二利","刘双利","刘三利" }; //动态初始化数组 String[] std_ids = new String[5]; } }names、names1、std_ids这三个变量是对数组对象的引用,一般引用变量是在方法栈里面声明和初始化的,而这三个变量所引用的对象是在堆里面进行内存分配的。
三、java数组必须初始化才能使用的理解
java数组必须初始化才能使用,通常指的是引用变量所指向的数组对象是否在堆内存中分配了一块连续的内存空间,这快内存空间的长度就是数组长度,如下例子:
int[] appIds = { 1,2,3,4,5 }; int[] copyAppIds ; copyAppIds = appIds; System.out.println(copyAppIds.length);
copyAppIds引用变量没有被初始化,但输出的copyAppIds的长度是5,也就是通过copyAppIds = appIds;让两个引用变量指向了同一个对象。
四、使用Arrays数组工具类,对数组进行操作,检索、填充、排序、比较、toString()等
int demo[] = new int[10]; //填充数组 Arrays.fill(demo, 3); //遍历数组 for (int i : demo) { System.out.print(i); } System.out.println(); //复制数组 int[] demo2 = new int[11]; System.arraycopy(demo, 0, demo2, 2, 4); for (int i : demo2) { System.out.print(i); } System.out.println(); //数组比较 int[] demoA = new int[3]; int[] demoB = new int[3]; Arrays.fill(demoA, 3); Arrays.fill(demoB, 3); System.out.println(demoA == demoB);//false System.out.println(demoA.equals(demoB));//false equals函数如果没有重写就是比较demoA == demoB System.out.println(Arrays.equals(demoA, demoB));//true System.out.println(); //多维数组比较 int[][] demo21 = {{1,2,3},{2,3,5,6}}; int[][] demo22 = {{1,2,3},{2,3,5,6}}; System.out.println(demo21.equals(demo22));//false equals函数如果没有重写就是比较demoA == demoB System.out.println(Arrays.equals(demo21, demo22));//false System.out.println(Arrays.deepEquals(demo21, demo22));//true //数组排序 int[] a3 = {3, 2, 5, 4, 1}; System.out.println(Arrays.toString(a3)); Arrays.sort(a3); System.out.println(Arrays.toString(a3)); //一维数组数值检索 int index1 = Arrays.binarySearch(a3, 4); int index2 = Arrays.binarySearch(a3, -12); int index3 = Arrays.binarySearch(a3, 15); System.out.println(index1 + " " + index2 + " " + index3);
基本类型变量的值存放在栈内存中,这句话是不正确的,实际上:所有局部变量都是存放在栈内存中保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈区中,但引用类型变量所引用的对象则总是存放在堆内存中的,对于java而言,堆内存中的对象通常是不允许直接访问的,为了访问堆内存中的对象,只能通过引用变量。