一维数组
一维数组初始化
int[] ids;//一维数组的声明
//静态初始化:数组变量和数组元素赋值同时进行
ids=new int[]{1001,1002,1003,1004};
//动态初始化:数组变量和数组元素的赋值分开进行
String[] names=new String[5];
//一维数组也正确的写法
int[] arr4={1,2,3,4};//类型推断
names[0]="张三";
names[1]="李四";
names[2]="李某";
names[3]="王某";//charAt(0)获取一个字符
names[4]="张某";
//获取数组的长度
System.out.println(names.length);
for(int i=0;i<names.length;i++){
System.out.println(names[i]);
}
//其他初始化
int a[]=new int[2];
int[] b=new int[]{1,2,3};
int[] c={4,5,6,7};
name[0]="wang";
System.out.println(name[0]);
/*
错误示范
int[] d;
d={1,3,5,6};
int[] e=new int[3]{0,9,8};
*/
一维数组初始化默认值
int | 0 |
---|---|
double | 0.0 |
String | NULL |
char | 数值0 |
一维数组内存解析
1、Java中的内存结构如何划分的?
将内存区域划分为5个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区
和数组相关的内存结构:虚拟机栈、堆
虚拟机栈:存放方法中声明的变量
堆:存放数组的实体(即数组的所有元素)
多维数组
二维数组的声明和初始化
//静态初始化
int[][] arr1=new int[][]{{1,2,3},{4,5,6}};
//动态初始化
int[][] arr2=new int[2][3];
double[][] arr3=new double[3][];
//其他初始化
int arr4[][]=new int[2][3];
int[] arr5[]=new int[][]{{1,2},{4,5},{7,8}};
int arr6[][]={{1,2,3},{7,8,9}}; //类型推断
遍历
for (int i = 0; i < arr5.length; i++) {
for (int j = 0; j < arr5[i].length; j++) {
System.out.print(arr5[i][j]+" ");
}
System.out.println();
}
初始值
//外层元素默认值为地址值,内层元素默认值和一维数组一样
int[][] arr1=new int[3][2];
System.out.println(arr1[0]); //地址值
//外层元素默认值为NULL
int[][] arr2=new int[3][];
System.out.println(arr2[0]);
System.out.println(arr2[0][0]);//报错,空指针异常
类型转换
int[]和byte[]不能转换,它们是两种不同的引用变量
int[]和int[][]也不能转换,一个是一维,一个是二维,但是如果arr1是一维数组,arr2是二维数组,此时arr2[0]=arr1是可行的。
要想数组之间可以转换,首先维数需要一样,其次类型需要一样
特殊输出
char类型的数组如果输出数组名,最终输出的内容是数组中的值而不是地址值,其他输出的为地址值
int[] arr1=new int[]{1,2,3};
System.out.println(arr1); //[I@4554617c
char[] arr2=new char[]{'a','b','c'};
System.out.println(arr2); //abc
boolean[] arr3=new boolean[]{true,false,true};
System.out.println(arr3); //[Z@74a14482
String[] arr4=new String[]{"qw","er","fd"};
System.out.println(arr4); //[Ljava.lang.String;@1540e19d