1 值传递和址传递

值传递


方法调用时,传递的实参是一个基本类型的数据


形参改变,实参不变


public static void doSum(int num1,int num2){}

main(){

   doSum(10,20);

   

   int i = 10 ;

   int j = 20 ;

   doSum(i,j) ;

}


public static void t1(int num){

   num = 20 ;

   System.out.println(num) ; //20

}

main(){

   int i = 10 ;

   t1(i) ; //值传递

   System.out.println(i); //10

}



址传递


又称为地址传递,或引用传递


方法调用时,传递的实参是一个引用类型的数据


基本类型的数据,比较简单,可以直接存储在变量中


引用类型的数据比较复杂,包含了一堆子数据,不能直接存储在变量中,存储在堆区,会为其分配一个内存地址


我们在使用引用类型数据时,都是通过地址间接引用类型的数据


所谓的地址传递,就是在方法调用时,传递的是引用类型的地址。


形参(内容)改变,实参(内容)改变


public static void t1(int[] nums){

   System.out.println(nums[1]); //20

   nums[1] = 200 ;

   System.out.println(nums[1]); //200

}

main(){

   int[] nums = {10,20,30} ;

   t1( nums ) ;  //址传递

   System.out.println(nums[1]); //

}


类似于值传递的址传递


public static void t1(int[] nums){

   System.out.println(nums[1]); //20

   nums = new int[]{100,200,300}

   System.out.println(nums[1]); //200

}

main(){

   int[] nums = {10,20,30} ;

   t1( nums ) ;  //址传递

   System.out.println(nums[1]); //20

}

//main方法调用t1方法时,就相当于将t1方法中的代码拿到主方法中

main(){

   int[] nums1 = {10,20,30} ;

   {

       nums = nums1 ;

       System.out.println(nums[1]); //20

       nums = new int[]{100,200,300}

       System.out.println(nums[1]); //200

   }

   System.out.println(nums1[1]) ;//20

}



2 主方法传参

主方法是Java程序的入口


是由 jvm自动调用。


在程序执行的过程中,我们也可以调用主方法(都看需求)


在运行java程序时,我们通过命令行指定jvm调用主方法时要传递的参数。


默认情况下,jvm调用主方法时,传递的是一个0长度的数组。


java Test1 zs ls

在执行Test1程序时,告诉jvm,将zs和ls作为参数,传递个main方法。

jvm内部会将zs和ls组成一个String[],将这个String[]传递给main方法


public static void main(String[] args){

 for(int i=0;i<args.length;i++){

  String s = args[i] ;

  System.out.println(s);

 }

}

3 合并两个有序数组

有两个各自有序的数组 {10,20,30,40,50} , {5,15,25,35}


将两个数组合并成一个大数组,同时使得内容依然有序


定义双指针, 一个记录数组1的下标位置, 一个记录数组2的下标位置


从头开始, 依次对两个数组指针位置的元素进行比较


将小的数装入新数组,同时对应数组的指针++


循环进行下依次比较移动


注意:需要考虑一个数组提前移动完成的情况。 接下来不需要比较,只移动第二个数组即可


4 归并排序

有一个无序的数列,需要排序


我不会直接排序


但我可以将一个数组等分成2个小数组 10个长度的数组,分成2个5长度的数组。


我还会将两个有序数组合并成一个有序数组


如果有人可以将的两个小数组变成有序数组,我就可以将其合并成一个完整的有序数组。