一、Java只有值传递

在 Java 中:

  • 基本类型:传递 值的副本
  • 引用类型:传递 引用地址的副本

注意:
传递的是引用的副本,而不是对象本身

1
2
3
4
5
6
public void insert(int []nums,int num,int index){
for (int i = nums.length - 1; i > index; i--){
nums[i] = nums[i-1];
}
nums[index] = num;
}

调用:

1
2
3
int[] arr = {1,2,3,4,5};

insert(arr,10,2);

内存结构

调用前:

1
arr -----> [1,2,3,4,5]

调用方法时:

1
nums -----> [1,2,3,4,5]

注意:

1
arr 和 nums 指向的是同一块数组

只是:

1
nums = arr 的地址副本

所以:

1
2
arr地址 = 0x100
nums地址 = 0x100

因为传入的是对象地址值的副本,所以在方法内修改对象,对象中的信息也会改变,因为指向的同一块内存地址,方法内修改的是同一块内存地址;

但是如果在方法内改变对象的指向,方法外的对象不会改变; 因为传递的是副本,外面对象地址是不变的,方法内只是地址的副本的指向发生改变,不会影响方法外的对象;