Java传递
传值:传基本数据类型
传引用:引用类型的传递,传地址
//值传递,原数据不受影响(栈内存中两个方法同时运行互不影响)
//传引用,原数据跟着改变(传的是栈内存中的地址,通过地址改变堆内存中的数据后也就是改的原数据)
如下图左边是栈内存右边是堆内存
public static void main(String[] args) {
int i = 10;
m1(i);
System.out.println(i);
int[] nums = {4,5,8,2};
m2(nums);
for (int j : nums) {
System.out.println(j);
}
}
// 值传递,更改后,原数据不受影响(在栈内存中的不同方法互不影响m1改变不会影响i)
public static void m1(int i) {
i++;
System.out.println(i);
}
// 引用传递,两个局部变量找到同一个堆内存对象,所以同步更改
public static void m2(int[] nums1){
nums1[0] = 1;
System.out.println(nums1[0]+"---");
}
Java数组复制(替换式复制)
arraycopy:
System.arraycopy(src,2,dest,3,3);
实现这个功能
public static void main(String[] args) {
int[] src = {2,3,4,5,6,7,8};
int[] dest = {11,12,13,14,15,16,17,18};
// 某一个数组 , 中的某些元素(开始 到 结束) , 复制到另一个数组 , 的指定地方
// 源数组 , 源数组起始位置(包含) , 目标数据 , 目标数组起始位置 , 复制个数
// System.arraycopy(src, 2, dest, 3, 3);
m1(src, 2, dest, 3, 3);//将参数传给m1方法
// 不需要接收返回值,因为传引用嘛
for (int i : dest) {
System.out.println(i);
}
}
public static void m1(int[] src , int srcPos , int[] dest , int destPos , int length){
for (int i = 0; i < length; i++) {
dest[destPos++] = src[srcPos++];
}
}
}
//(要复制的数组,复制原数组的起始位置,目标数组,目标数组下标位置,要复制的长度)
插入式复制