代码的实践: //1. 传递基本数据类型参数
public static void main(String[] args) {
int num = 10;
to(num);
System.out.println("num = " + num);
}
public static void swap(int a, int b) {
int temp=num;
temp=num*num;
System.out.println("temp = " + temp);
}
//执行结果:
//temp = 100
//num = 10
//num没有变,传递的副本变化了,无论副本内容怎么修改,都不会影响原来的值;
//2. 传递引用数据类型参数:数组,字符串都是引用数据类型
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
System.out.println(arr[0]);
change(arr);
System.out.println(arr[0]);
}
public static void change(int[] array) {
// 将数组的第一个元素变为0
array[0] = 0;
}
//执行结果:
//1
//0
//这里要注意:这里传递的还是值,只不过这个值是实参的地址;也就是说change方法的参数拷贝的是 arr 实参)的地址,因此,它和arr指向的是同一个数组对象。这也就说明了为什么方法内部对形参的修改会影响到实参。
//3. 传递引用数据类型参数ii
//一个person的类
public class Person {
private String name;
// 省略构造函数、Getter&Setter方法
}
public static void main(String[] args) {
Person xiaoZhang = new Person("小张");
Person xiaoLi = new Person("小李");
swap(xiaoZhang, xiaoLi);
System.out.println("xiaoZhang:" + xiaoZhang.getName());
System.out.println("xiaoLi:" + xiaoLi.getName());
}
public static void swap(Person person1, Person person2) {
Person temp = person1;
person1 = person2;
person2 = temp;
System.out.println("person1:" + person1.getName());
System.out.println("person2:" + person2.getName());
}
//输出的结果:
//person1:小李
//person2:小张
//xiaoZhang:小张
//xiaoLi:小李
//swap 方法的参数 person1 和 person2 只是拷贝的实参 xiaoZhang 和 xiaoLi 的地址。因此, person1 和 person2 的互换只是拷贝的两个地址的互换罢了,并不会影响到实参 xiaoZhang 和 xiaoLi 。