数组
定义
数组指的是一种容器。用于存放同种数据类型的多个值。
![](https://i-blog.csdnimg.cn/blog_migrate/621215086eb28449efccc6a70c6fb368.png)
两种定义方式
![](https://i-blog.csdnimg.cn/blog_migrate/141ad7941d1097ea4b44a1c90c99f0df.png)
数组静态初始化
![](https://i-blog.csdnimg.cn/blog_migrate/800d3411492fef2d4b8395f9172879c4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c90f07c07cd84a9294deaa1009b1ed86.png)
![](https://i-blog.csdnimg.cn/blog_migrate/50cb57b89bb6bc8655580239688ed307.png)
数组动态初始化
![](https://i-blog.csdnimg.cn/blog_migrate/1f9781e1b55226fe923977ae637fa04e.png)
注意动态初始化指定长度之后,由虚拟机给出默认值。
public class demo01 {
public static void main(String[] args) {
String[] arr = new String[3];
arr[0] = "abc";
arr[1] = "qwe";
System.out.println(arr[0]); //abc
System.out.println(arr[1]); //qwe
System.out.println(arr[2]); //引用数据类型默认值,null
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/a02b7df98299448f5cbb3a7f520bb2d1.png)
数组访问越界
java不允许数组访问越界。会报错。
练习
打乱数组顺序
public class demo01 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndex = random.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
System.out.println(Arrays.toString(arr)); //[4, 2, 1, 5, 3]
}
}
java内存分配
![](https://i-blog.csdnimg.cn/blog_migrate/4022865c19cbec60df5362ea0352d356.png)
对于我们来说掌握栈和堆。
![](https://i-blog.csdnimg.cn/blog_migrate/6a44697ca58eb9e29cde351ddc1276b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2fec35589ccbc3901a5f08b433b471a4.png)
上面那段代码没有new,声明变量都在栈中,还有main函数调用的函数也在栈内存。
数组内存图
![](https://i-blog.csdnimg.cn/blog_migrate/bc46c8774f284d5c475e5f30531271f3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5bdd4734cc3618f0276a9c5aadb024b3.png)
总结
![](https://i-blog.csdnimg.cn/blog_migrate/a3e5c147ed0671f9afd63d130ff37694.png)
两个数组指向同一块内存空间
![](https://i-blog.csdnimg.cn/blog_migrate/afde99cbc861d21cb7aeba416cb5caa9.png)
总结就是一方修改,另一方也会变化,因为数据只有一份。
![](https://i-blog.csdnimg.cn/blog_migrate/bde5e597eddb20e18a0a608f636a2b1a.png)