数组知识点补缺
int[][]array1=new int[3][];//动态初始化1
/*外层元素初始化值为默认值。
内层元素初始化:不能调用,否则就报错*/
Int[][]array2=new int[3][2];//动态初始化2
/*外层元素初始化值:地址值
内层元素初始化值为默认值*/
//必须确定数组的长度
2.二维数组的默认值
public class Array{
public static void main(String[]args){
int[][]arr=new int[3][4];
System.out.println(arr[0]);//结果为[I@15db9742 是一个地址值 ,在堆中存放的是地址值
System.out.println(arr[0][0]);//结果为0
System.out.println(arr);//[[I@15db9742 是一个二位数组的地址值
int[][]arr1=new int[3][];
System.out.println(arr1[1]);//结果为0 因为没有内层数组还没有值
System.out.println(arr1[1][1]);//会报错,空指针异常 二维数租内部是空的
}
}
3.数组的复制
错误方式array2=array1:
这里只是将array1的地址给了array2,实际上还是堆中的同一个数组.如果修改array2,堆里的数组也会改变,array1也会发生变化,所以这里不是复制。
/**
* @author new wei
* @date 2022/4/3 22:14
*/
/**
* COpy
* <h5>描述:</h5>
*/
public class Copy {
public static void main(String[]agrs){
int []array1=new int[]{1,2,3,4,5};
int[]array2;
array2=array1;//这里只是将array1的地址给了array2,实际上还是堆中的同一个数组
for (int i : array2) {
System.out.print(i);//12345
}
System.out.println("==============");
for (int i = 0; i < array2.length; i++) {
if (i % 2 == 0) {
array2[i]=i;
}
}
for (int i = 0; i < array2.length; i++) {
System.out.print(array2[i]);//02244
}
System.out.println( );
for (int i : array1) {
System.out.print(i);//02244
}
}
}
正确方法
真正的方式应该是先建立一个空的二维数组,然后把已知二位数组的值给赋值过去;如下代码
/**
* @author new wei
* @date 2022/4/3 22:14
*/
import java.util.Arrays;
/**
* COpy
* <h5>描述:</h5>
*/
public class Copy {
public static void main(String[]agrs){
int []array1=new int[]{1,2,3,4,5};
int[]array2=new int[array1.length];
for (int i = 0; i <array1.length ; i++) {
int j =i;
array2[j]=array1[i];
}
System.out.println(Arrays.toString(array2));
for (int i = 0; i < array2.length; i++) {
if (i % 2 == 0) {
array2[i]=i;
}
}
System.out.print("=================");
System.out.print(Arrays.toString(array2));
System.out.print(Arrays.toString(array1));
}
}

浙公网安备 33010602011771号