1.以一维int[] arr为例子
java中数组,int[] arr = {1,2,3,4}; ------->[]中不能放数字,与c的区别 下标跟从0开始, 类型为————> int[] int[] arr1 = new int[3];//没有初始化 ------>new为Java关键字,用于实例化对象 表示全部放0,长度为3的数组 int[] arr2 = new int[]{1,2,3,4}; //初始化后[]不能加数字 输出数组某一项System.out.println(arr[1]); 注意数组越界限 ,也可以改某一数组项的值
2.求数组的长度
数组长度a,直接 int a = arr.length;
3.如何遍历数组呢?这里介绍3种遍历数组, 可以main中直接用,也可以转化为方法调用
int[] arr ={1,2,3,4,5}; int n=arr.length; //用for可以读取数组的下标 //for each直接读取每一个元素 1.for(int i=0;i<n;i++){ System.out.print(arr[i]+" "); } System.out.println(); 2.for(int x:arr){ //for each循环 System.out.print(x+" "); } 3.利用Arrays,导入一个包,打印出数组各项 System.out.println(Arrays.toString(arr)); 这里输出后两边会带括号[1,2,3,4,5]
4.Java的数组与c语言的数组差别
int[] arr={1,2,3,4}; arr作为引用变量,保存变量地址,指向对象{1,2,3,4}这个数组 在这里数组所对应的地址其实是对象的,而不是这个数组变量的,引用变量为了产生这个地址 int[] arr1=null; ————>表示arr1不指向任何对象 此时arr1.length没有意义
5.数组作为方法的参数,类似函数参数
//按引用传递 public static void arrAll(int[] arr){//实参arr传过去自身存储的地址,给形参,让形参也通过这个地址访问 int n=arr.length; ——————知道数组长度很有必要 for(int i=0;i<n;i++){ System.out.println(arr[i]); }
6.关于引用变量arr传参数,实参与形参关系
注意实参转到形参后对象有没有改变,对象改变,实参不改变? 指向对象相同时才可以改值, 引用只是形成地址,对象所在才是地址 1. public static void change1(int[] arr){ arr=new int[]{2,3,4,5,6};// 形参传入后对象改变了,与原来的实参割裂开,实参不变 } public static void main(String[] args) { ————————>这里因为实参arr引用为形参arr所对应的对象改变了, int[] arr ={1,2,3,4,5}; change1(arr); System.out.print(Arrays.toString(arr)); 最后为[1,2,3,4,5] } 2. public static void change2(int[] arr){ ———————>对象没变 arr[0]=10; } public static void main(String[] args) { int[] arr ={1,2,3,4,5}; change2(arr); System.out.print(Arrays.toString(arr)); 最后为[10,2,3,4,5]
7.一个引用只能指向一个地址,多个引用可以指向同一个地址
8.引用的指向,为对象的指向,地址只有一个,但是有两个指向,
int[] arr1={1,2,3}; int[] arr2=arr1; 表示: arr2这个引用指向arr1这个引用指向的对象
9.数组的拷贝
拷贝数组 int[] arr = {1,2,3}; int[] arr1 = Arrays.copyOf(arr,arr.length) ————>括号内为引用的地址和数组长度,arr1为{1,2,3} int[] arr2 = Arrays.copyOf(arr,arr.length*2) ——————>arr2为{1,2,3,0,0,0},创建了一个新的对象 | 拷贝数组的一部分 | int[] arr3 = Arrays.copyOfRange(arr,1,3);——————arr[1],arr[2]//括号内为左闭右开[1,3),注意越界这个问题 int[] arr4 = arr.clone();————>产生一个副本 为{1,2,3} arr与arr4直接一致,
10.深拷贝与浅拷贝
深拷贝:拷贝之后拷贝引用对象的值改变,原引用对象的值不随之改变 浅拷贝: 引用对象的值改变————>对象已经被改变了,copy后对应的对象也是改变后的值