Java 程序设计语言对对象采用的不是引用调用,实际上, 对象引用是按
值传递的。
下面总结一下 Java 中方法参数的使用情况:
•一个方法不能修改一个基本数据类型的参数
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能让对象参数引用一个新的对象。
package com.wise;
/**
* @author zj
* @date 2020/11/30 16:05
*/
public class EmployeeTest {
public static void main(String[] args) {
//一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。这里是值传递
int c = 10;
int d = 11;
System.out.println("(int)成员变量c:"+c + "------" +"成员变量d:"+ d);
swapNum(c, d);
System.out.println("执行交换数字方法后::成员变量c:"+c + "------" +"成员变量d:"+ d);
//java方法的对象传参,不是对象调用,而是对象拷贝的引用,也是值传递,不过的地址值的传递
Employee a = new Employee();
a.setA(1);
Employee b = new Employee();
b.setA(2);
System.out.println("(Employee)成员变量a:"+a + "------成员变量b:"+ b);
swapObj(a, b);
System.out.println("执行交换地址方法后::(Employee)成员变量a:"+a + "------" +"成员变量b:"+ b);
//java方法的对象传参,不是对象调用,而是对象拷贝的引用,也是值传递,不过的地址值的传递,所以地址值不会变,但会修改对象状态
change(a,b);
System.out.println("执行change方法:再次交换地址并设置属性值:a:"+a.getA()+ "------b:"+b.getA());
}
public static void swapObj(Employee a, Employee b) {
Employee temp = null;
temp = a;
a = b;
b = temp;
System.out.println("方法内(Employee)局部变量a:" + a + "------局部变量b:"+ b);
}
public static void swapNum(int c, int d) {
int temp = 0;
temp = c;
c = d;
d = temp;
System.out.println("方法内(int)局部变量c:" + c + "------局部变量d:"+ d);
}
public static void change(Employee a, Employee b) {
//各个变量指代的内存地址交换
Employee temp = null;
temp = a;
a = b;
b = temp;
System.out.println("方法内地址交换成功:a的地址值变更为:" + a +"---a的属性参数数值为:"+a.getA()+ "------b的地址值为:" + b+"---b的属性参数数值为:"+b.getA());
a.setA(11);
b.setA(22);
System.out.println("方法内地址交换成功:a的地址值变更为:" + a +"---a的属性参数数值为:"+a.getA()+ "------b的地址值为:" + b+"---b的属性参数数值为:"+b.getA());
}
}