Java 基础( 数组)

数组

  • 数组(Array), 是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

  • 数组的常见概念
    1.数组名
    2.下标(或索引)
    3.元素
    4.数组的长度:元素的个数

  • 数组的特点
    数组是有序排列的

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。

数组的长度一旦确定,就不能修改。

可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

  • 数组的分类
    1.按照维数: 一维数组,二为数组
    2.按照数组元素的类型,基本数据类型元素的数组,引用数据类型元素的数组

  • 数组元素的默认初始化值
    1.数组元素是整型: 0
    2.数组元素是浮点型: 0.0
    3.数组元素是char型, 0或'u0000',而非'0'
    4.数组元素是boolean型,false
    5.数组元素是引用数据类型: null

java 内存构成

多维数组

  • 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
  • 对于二维数组的理解,我们可以看成是一堆数组 array1 又作为另一个一维数组 array2 的元素而存在,其实,从数组底层的运行机制来看,其实没有多维数组。
public class ArrayTest2 {
	public static void main(String[] args) {
		//1. 二维数组的声明和初始化
		// 静态初始化1
		int [][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};
		
		// 静态初始化2
		int[] arr4[] = new int[][] {{1,2,3},{4,5},{6,7,8}};
		
		// 静态初始化3
		int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
		
		// 动态初始化1
		String[][] arr2 = new String[3][2];
		
		// 动态初始化2
		String[][] arr3 = new String[3][];
		
		//2.如何调用数组的指定位置的元素
		System.out.println(arr1[0][1]);    //2
		System.out.println(arr2[1][1]);    //null
		//System.out.println(arr3[1][0]);  //报错
		
		arr3[1] = new String[4];
		System.out.println(arr3[1][0]);    //null
		
		//3.获取数组的长度
		System.out.println(arr4.length);   //3
		System.out.println(arr4[0].length);//3
		
		//4.遍历二维数组
		for(int i = 0; i < arr4.length; i++) {
			for(int j = 0; j < arr4[i].length; j++) {
				System.out.print(arr4[i][j] + " ");
			}
			System.out.println();
		}
	}

}

二维数组

  • 二维数组分为外层数组的元素,内层数组的元素
    例如: int [][] arr = new int[4][3];
    外层元素: arr[0], arr[1]等
    内层元素:arr[0][0], arr[1][2]
  • 数组元素的默认初始化值
    针对初始化方式一:比如 int[][] arr = new int[4][3];
    外层元素的初始化值为:地址值
    内层元素的初始化值为:与一维数组初始化情况相同
    针对初始化方式二:比如 int[][] arr = new int[4][];
    外层元素的初始化值为:null
    内层元素的初始化值为:不能调用,否则报错

二维数组内存解析

public class ArrayTest3 {
	public static void main(String[] args) {
		int [][] arr = new int[4][3];
		System.out.println(arr[0]);        //[I@182decdb  <- 一元数组地址值
		System.out.println(arr[0][0]);     //0
		System.out.println(arr);           //[[I@7637f22  <- 二元数组地址值
		
		System.out.println("********************************");
		float[][] arr1 = new float[4][5];
		System.out.println(arr1[0]);       //[F@4926097b
		System.out.println(arr1[0][0]);    //0.0
		
		System.out.println("********************************");
		String[][] arr2 = new String[4][2];
		System.out.println(arr2[1]);       //[Ljava.lang.String;@2d363fb3
		System.out.println(arr2[1][1]);    //null
	}

}

原文地址:https://www.cnblogs.com/klvchen/p/14255817.html