数组的定义与使用
在Java中数组存放于堆中,在堆上开辟内存
数组:存放一组相同数据类型的集合
数组的创建:
int[] arr1 = new int[5](动态初始化为0)和 int[] arr2 = new int[] {1,2,5,7,6}均是动态初始化
数组的遍历:
输出结果:
这里需要注意访问不能越界,数组下标是从0开始,数组长度为6,所以 i 的值是不能取到6的。
因为数组也是属于引用类型,他会在堆上开辟一段内存,而数组arr在栈上,用来存引用(地址)。
注意引用类型的特点:引用类型的0值是null(null 也属于对象,空对象)
所以此时如下访问会出现错误,空指针异常,此时打印的相当于null.length的长度。
这里需要知道当数组置为空时,原来的对象将被GC自动回收,不需要释放。
数组作为方法的参数:
这里两次打印的结果相同,是因为在上一次函数调用时已经将arr[0]的值改为了99,下次在通过arr引用时访问的也是99(传引用)。
两个引用同时指向一个对象
特点:通过一个引用修改这个对象的值,通过另一个引用来访问这个对象的时候值也发生了改变。
例:
最开始num被定义为0,在调用函数时将x变为0,在函数中将x定义为10,然后打印x,其值为10,在结束函数调用之后,再继续打印num,其值为0(按值传递)。
引用:
可以理解成一个指针,创建一个引用相当于创建了一个很小的变量,这个变量保存了一个整数,这个整数表示内存中的一个地址。
Java内存区域划分:
1.局部变量和引用保存在栈上,new出的对象保存在堆上
2.堆的空间非常大,栈的空间比较小
3.堆是整个JVM共享一个,而栈的每个线程具有一份(一个Java程序中可能存在多个栈)
数组作为方法的返回值:
例:
1.直接改变原来的数组,将数组的值乘以2,调用之后原数组改变
2.不改变原来的数组,将数组的值乘以2,调用之后原数组不变