数组的定义与使用总结
程序员文章站
2024-02-26 18:45:04
...
1.数组基本用法
1.1创建数组
有以下三种方法(此处用Int类型示例):
//动态初始化
int[] arr = new int[] {1,2,3,4,5};
int[] arr = new int[5];
//静态初始化
int[] arr = {1,2,3,4,5};
注意事项:静态初始化的时候,数组元素个数和初始化数据的格式是一致的。
1.2数组的使用
//获取数组长度
System.out.println("length:"+arr.length);
//访问数组元素
System.out.println(arr[0]);
//获取数组地址(哈希码)
System.out.println(arr);
注意事项:
下标访问操作不能超出有效范围[0,length-1],否则出现下标越界异常。“ArrayIndexOutOfBoundsException”即下标越界异常。
遍历数组(两种):
①使用for循环
②使用for-each,for-each代码如下:
int[] arr = {1,2,3};
for(int x:arr){
System.out.println(x);
}
③将数组快速打印出来:
System.out.println(Arrays.toString(arr);
上述①②两种方法区别:for-each不能使用下标。
2.数组作为方法的参数
2.1引用类型
①参数传内置类型``
int num = 0;
func(num);
②参数传数组类型
int[] arr = {1,2,3};
func(arr);
注意: 参数传内置类型时,修改形参的值,不影响实参num。而参数传数组内容时,在函数内部修改数组内容,函数外部也发生改变。
JVM内存区域划分
主要划分为以下几大部分:
①程序计数器:只是一个很小的空间,保存下一条执行的指令的地址。
②虚拟机栈:重点存储局部变量表,例int [ ] arr这样的存储地址的引用。
③本地方法栈:与虚拟机栈类似,只不过保存的内容是Native方法的局部变量。
④堆:JVM所管理的最大内存区域,使用new创建的对象都是在堆上保存。
⑤方法区:用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。方法编译出的字节码就是保存在这个区域。
⑥运行时常量池:是方法区的一部分,存放字面量与符号引用。
重点理解虚拟机栈和堆,如下图:
即:局部变量和引用保存在栈上,new出的对象保存在堆上。
3.数组的拷贝
- 用for循环
- arraycopy方法 使用时System.arraycopy() 无返回
- copyOf方法 使用时int[] newarr = Array.copyOf() 有返回
以上②③两者区别:1)返回值 2)调用System Array不同 3)速度问题:System.arraycopy()更快 - array.clone即数组名.clone 数组名为你要拷贝的数组名
以上四种方式:
对于数组中是简单类型就是深拷贝 数组中是引用类型就是浅拷贝
浅拷贝:把1拷贝到2中,改变2则1也改变 即修改源数组不会影响到新数组
深拷贝: 把1拷贝到2中,改变2则1不改变 即修改源数组会影响到新数组
4.二维数组
4.1基本用法(int类型为例)
int [][] array = new int [][] {{1,2,3},{4,5,6}};
int [][] array = {{1,2,3},{4,5,6}};
int [][] array = {{1,2},{3,4,5}};
二维数组本质上:就是一维数组,只不过每个元素又是一个一维数组。
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时139:根据索引取得数据
-
数组的定义与使用总结
-
STM32F103 官方库的使用注意 关于宏定义 STM32F10X_MD
-
java枚举类的定义和使用
-
【阿里云】Java面向对象开发课程笔记(二)——数组的定义与使用
-
java枚举的使用, 常量与枚举的区别