Java入门 - 数组¶
一般常见的是:
int[] arr = {1,2,3};//常见,标准化写法
int[] arr1 = new int[]{1,2,3};//不常见,啰嗦,不如第一种写法.第一种写法其实是这种写法的缩写.
int arr2[] = {1,2,3};//不常见,只是为了让c程序员习惯
System.out.println(arr);//这样会打印出arr的地址值 如[I@776ec8df
//[ 表示是一个数组 I表示数组元素是int(D代表double) @表示一个间隔符号(固定的必须有)
//后面的数字才是真正的地址值.
System.out.println(arr.length)//java数组自带的方法length
System.out.print(arr.length)//print 不会换行
遍历数组idea有自带的方法:数组名.fori 按tab即可生成:
for(int i = 0;i<arr.length;i++){
}
动态初始化:
int[] arr = new int[3];//生成3个int的数组.初始化值是虚拟机默认的.
默认初始化值:
Open: iamwsll1174408790056033.png
引用数据类型:目前除了上面四种之外都是引用数字类型.
如果越界了,那么会抛出数组越界异常
早期,Java的内存分配为: 1. 本地方法栈 其实就是原先的内核空间 2. 寄存器 3. 栈 4. 堆 数组存储的数据都是在栈中 5. 方法区 就是原本的代码区
JDK8开始,取消了方法区,新增了元空间.把原先方法区的多种功能拆分,有的放到了堆中,有的放到了元空间中. 另外,数组arr只会在栈中存一个指针,指向数组对应的堆空间.数组的堆空间中,除了包含数组内容,还会有专门的空间存储length.
另外:
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
二维数组
int[][] arr = new int[][]{{1,3},{2,4}};
int[][] arr = {{1,3},{2,4}};
int arr[][] = {{1,3},{2,4}};//虽然可以编过,但是不好,不符合alibaba编程规范
最规范的写法:
int[][] arr = {
{1,3},
{2,4}
};
许多特性都和c一样,如System.out.println(arr[0])打印的是第一个数组的地址
动态二维数组:int[][] arr = new int[n][m];
Open: iamwsll11744177367385445.png
由此可见,内存结构上其实和c的二维数组不是很一样.
Open: iamwsll11744177436394879.png
特殊情况.不过可以重新操作:
Open: iamwsll11744177484690223.png

事实上,可以创建长度为0的数组: int[] arr = {} int[] arr = new[0]; 都是可以的.因此判断arr的边界情况的时候,不仅要判断null还要判断长度是否为0.