java 数组是一组连续的存储空间,存储多个相同数据类型的值,特点是类型相同、长度固定。
有待确定的地方,因为 OC 里 NSMutableArray 可变数组对象可以存储不同数据类型,并且长度也不用在定义时固定,我想 java 应该有相同功能的对象,但我还没学到,所以这篇文章都是按目前的概念来写。
数组的4要素: 数组名称、数组元素、元素类型、元素下标。
数组的4种初始化方法,前两种常用。
// 1int[] data1 = new int[5]; // 2int[] data2 = {1, 2, 3, 4, 5}; //3int[] data3;data3 = new int[5]; // 4int[] data4 = new int[] {1, 2, 3, 4, 5};
各种类型的数组元素默认值。
// 没有默认值int a; // 0int b[] = new int[5]; // 0.0double[] c = new double[5]; // falseboolean[] d = new boolean[5]; // 空字符char[] e = new char[5]; // 默认值为 nullString[] f = new String[5]; String g = null;// 使用 . 语法时会报空指针的错误;数组为 null,使用 arr.length 时同样会报错// g.equals("dd");
数组的两种扩容方法。
import java.util.Arrays;// 数组扩容public class test4 { public static void main(String[] args) { int[] data = {1,2,3,4,5}; int[] newArr = new int[data.length * 2]; /** * 1 * System.arraycopy(src, srcPos, dest, destPos, length); 无返回值 * Object src 源数组 * int srcPos 从源数组的下标开始复制 * Object dest 目标数组 * int destPos 从目标数组下标接受值 * int length 从源数组的srcPos开始接收多少长度的数据,注意源数组的srcPos + length 不能大于 src.length,否则数组越界报错 */ System.arraycopy(data, 0, newArr, 0, data.length); /** * 2 * Arrays.copyOf(original, newLength); 返回一个新数组 * Object original 源数组 * int newLength 新数组长度 */ int[] newArr2 = Arrays.copyOf(data, 20); for (int i = 0;i < newArr2.length; i ++) { System.out.println(newArr2[i]); } }}
基本数据类型和引用数据类型的传递参数。
package com.qf;public class test5 { public static void main(String[] args) { int sum = 10; int[] arr = {10,11,12}; String str = "在吗?"; method1(sum); // 10 method2(arr); // 100 method3(str); // 在吗? System.out.println(sum); System.out.println(arr[0]); System.out.println(str); } public static void method1(int sum) { sum = sum + 1; } public static void method2(int[] arr) { arr[0] = 100; } public static void method3(String str) { str = str + "增加"; }}
基本数据类型是值传递,在函数内部改变后,不会改变函数外面的变量值;基本数据类型以外都是引用数据类型,引用数据类型(String 除外)的传递是内存地址的传递,在函数内改变存储变量的值会改变函数外的变量值。但代码里可以看到,String 也是引用数据类型,并没有改变函数外 String 的值,因为 String 是特例,打印数组的时候,打印的内存地址,打印 String 的时候,跟基本数据类型一样,打印的是值,所以 String 也是值传递。
java 内存分配默认为机器内存的 1/8,基本数据类型存储在栈区,引用数据类型的元素存储在堆区。数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中,实际的数组元素被存储在一组连续的堆(heap)内存空间中。