【Java】数组的定义与使用

数组的定义:相同类型的集合,内存是连续的

一.数组的创建

//动态初始化:数据类型[ ] 数组名称 = new 数据类型 [长度] { 初始化数据 };

int[] arr = new int[3]{1, 2, 3};

// 静态初始化:数据类型[ ] 数组名称 = { 初始化数据 };

int[ ] arr = {1, 2, 3}; 

二.数组的使用
1.数组的长度:数组名length 能够获取到

2.在使用数组时,注意数组下标越界问题:
【数组越界异常】 java.lang.ArrayIndexOutOfBoundsException

3.【遍历数组】
(1)for循环遍历
(2)for each遍历:for(表达式1:表达式2)

int[] arr = {1, 2, 3}; 
for (int x : arr) {   
 System.out.println(x); 
 }
// 执行结果 
1 
2 
3

<二者区别>
for循环输出 System.out.println(arr[i]);
for each循环输出 System.out.println(x);
由此可以看出,for each不能用下标去访问

4.当定义好数组后,没有初始化,默认值为0;数组当中如果是引用类型就是null。

5.Java中的传递只有按值传递。

6.null是所有引用类型的初始值。

int arr=null;
System.out.println(arr.length);//会出现空指针异常

三.【Java当中的内存分析】

Java虚拟机 局部变量。

本地方法栈: native方法,底层由C++实现(特点:快)。

程序计数器: 保存下一条执行的指令的地址。

堆: 对象。new关键字。

方法区: 静态变量,类的信息。

常量池: 存放字符串常量。String str=‘hello’;
a.在JDK1.7之前,常量池在方法区当中。
b.在JDK1.7开始,常量池被挪到了堆当中。

三.【数组的拷贝】
(1)for循环
(2)System.arrayCopy():被native所修饰的方法;
(3)Arrays.copyOf():方法内部调用了System.arrayCopy();
(4)数组名.clone();

import java.util.Arrays 
int[] arr = {1,2,3,4,5,6}; 
int[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println("newArr: " + Arrays.toString(newArr)); 
 
arr[0] = 10; 
System.out.println("arr: " + Arrays.toString(arr));
System.out.println("newArr: " + Arrays.toString(newArr)); 

深拷贝: 以上4种拷贝方式,针对数组当中的简单类型。
浅拷贝: 以上4种拷贝方式,针对数组当中存放的是引用类型。
【注意】
如果是两个引用,同时指向一个对象,那么通过一个引用,修改当前对象的值后,那么另一个引用也会受到影响。这种拷贝也叫浅拷贝。

四.【Arrays工具类的使用】
* Arrays.copyOfRange:拷贝部分
* Arrays.equals(array,array2):判断两数组的长度和内容是否相等
*Arrays.fill(array,9);:全部填充为9
* Arrays.fill(array,2,7,9):2号下标到7号下标填充为9,
不包含7号下标
* Arrays.sort(array2);对数组进行排序

二维数组

数据类型[ ][ ] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

int[][] arr = {    
 {1, 2, 3, 4},     
 {5, 6, 7, 8},    
 {9, 10, 11, 12} 
 };

(二维数组的用法和一维数组并没有明显差别)

发布了20 篇原创文章 · 获赞 23 · 访问量 572

猜你喜欢

转载自blog.csdn.net/m0_45097186/article/details/102641408