一、数组的赋值机制
1.基本数据类型赋值,这个值就是具体的数据,而且相互不影响
2.数组在默认情况下是引用传递,赋的值是地址
public class ArrayAssign {
public static void main(String[] args) {
// 基本数据类型赋值,赋值方式位值拷贝
int n1 = 10;
int n2 - n1;
n2 = 80;
System.out.println("n1=" + n1);//10
System.out.println("n2=" + n2);//80
// 数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传递
// 是一个地址,arr2的变化会影响arr1
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 10;
for(int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
二、内存图
三、数组的拷贝.
public class ArrayCopy {
public static void main(String[] args) {
// 将int[] arr1 = {10,20,30}; 拷贝到arr2数组
// 要求数据空间是独立的
int[] arr1 = {10, 20, 30};
// 创建一个新的数组arr2 开辟新的数据空间
// 大小为 arr1.length;
int[] arr2 = new int[arr1.length];
// 遍历arr1 把每个元素拷贝到arr2对应的位置
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
// 修改arr2的元素
arr2[0] = 100;
// 输出arr1
for(int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);//10,20,30
}
// 输出arr2
for(int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);//100,20,30
}
}
}
四、数组翻转
方法一
public class ArrayReverse{
public static void main(String[] args) {
// 定义数组
int[] arr = {11, 22, 33, 44, 55, 66};
/*
思路分析
先找规律
1.把 arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11}
2.把 arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11}
3.把 arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11}
4.一共要交换 3 次 = arr.length / 2
5.每次交换对应的下标是 arr[i] 和 arr[arr.length -1 - i]
*/
// 定义变量,保存数据
int temp = 0;
int len = arr.length;//计算数组的长度
for(int i = 0; i < len / 2; i++) {
temp = arr[arr.length -1 - i];//保存
arr[arr.length -1 - i] = arr[i];
arr[i] = temp;
}
for(int i = 0; i < len; i++) {
System.out.print(arr[i] + "\t");//66,55,44,33,22,11
}
}
}
方法二
public class ArrayReverse01 {
public static void main(String[] args) {
// 定义数组
int[] arr = {11, 22, 33, 44, 55, 66};
/*
思路
使用逆序赋值方式
1.先创建一个新的数组 arr1,大小为arr.length
2.逆序遍历arr 将每个元素拷贝到arr1的元素中
3.增加一个循环变量 j ->0 ->5
*/
int[] arr1 = new int[arr.length];
for(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {
arr1[j] = arr[i];
}
// 将arr指向arr1的数据空间,此时arr原来的空间就没有变量引用
// 会被当作垃圾销毁
arr = arr1;
// 输出arr
for(int i = 0; i < arr1.length; i++) {
System.out.print(arr[i] + "\t");//66,55,44,33,22,11
}
}
}