一、数组的赋值
1)基本数据类型赋值,赋值方式为值拷贝,这个值就是具体的数据,而且相互不影响。
2)数组在默认情况下是引用传递(地址拷贝),赋的值是地址,解释如下图
数组arr1指向的是一个地址,这个地址指向的内存空间内有数组的三个元素,当将arr1赋给arr2时拷贝的是这个地址,即两个数组共用一个内存空间,当修改arr2内的元素时,arr1内的元素也会发生相应的改变(在内存里只要分配了一个数据空间,一定会对应一个地址)
二、数组拷贝
拷贝数组内的数组,而不是地址,也就是说一个数组内的元素变化不会影响另一个数组
题目:将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的
1)开创一个新的数组arr2,数组的长度是arr1.length;
2)使用for循环,将arr1内的元素的值分别拷贝给arr2内的每一个元素
3)使用for循环,输出arr1和arr2内的元素
代码如下:
public class ArrayCopy{
public static void main(String[] args){
int[] arr1 = {10, 20, 30};
int[] arr2 = new int[arr1.length];
for(int i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + " ");
}
System.out.print("\n");
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + " ");
}
}
}
以上代码中,两个数组各自的元素改变不会影响另外一个数组
比如:
public class ArrayCopy{
public static void main(String[] args){
int[] arr1 = {10, 20, 30};
int[] arr2 = new int[arr1.length];
for(int i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
arr2[0] = 100;
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + " ");
}
System.out.print("\n");
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + " ");
}
}
}
运行结果只有arr2[0]的数值发生了变化
内存分析图如下
三、数组翻转
要求:把数组的元素内容反转。 ArrayReverse.java
第一种思路分析://要求:把数组的元素内容反转。 ArrayReverse.java
//arr {11,22,33,44,55,66},输出 {66, 55,44,33,22,11}
//arr[0]和arr[5]交换,arr[1]和arr[4]交换,arr[3]和arr[4]交换,共进行3次交换
//如果a = 5 ; b = 4;将a和b交换的步骤为
t = a;
a = b;
b = t
同理数组内元素也可以这样交换
public class ArrayReverse{
//编写一个main方法
public static void main(String[] args){
int[] arr = {11, 22, 33, 44, 55, 66};
for (int i = 0; i < 3; i++){
int t = arr[i];
arr[i] = arr[5-i];
arr[5-i] = t;
}
for (int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}
先死后活
3 = arr.length/2;5-i也可以替换成arr.length-1-i
public class ArrayReverse{
//编写一个main方法
public static void main(String[] args){
//要求:把数组的元素内容反转。 ArrayReverse.java
//
//arr {11,22,33,44,55,66} {66, 55,44,33,22,11}
//1和6交换,2和5交换,3和4交换
int[] arr = {11, 22, 33, 44, 55, 66};
for (int i = 0; i < arr.length/2; i++){//3 = arr.length/2
int t = arr[i];
arr[i] = arr[arr.length-1-i];//5-i也可以替换成arr.length-1-i
arr[arr.length-1-i] = t;
}
for (int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}