Java值传递机制

一、针对于方法内变量的赋值举例

  1. /**
  2. * Description:
  3. *
  4. * @author zygui
  5. * @date Created on 2020/6/25 19:21
  6. */
  7. public class VarTest {
  8. public static void main(String[] args) {
  9. System.out.println("***********基本数据类型:****************");
  10. int m = 10;
  11. int n = m;
  12. System.out.println("m = " + m + ", n = " + n); // 很简单, m = 10, n = 10;
  13. n = 20;
  14. System.out.println("m = " + m + ", n = " + n); // 很简单, m = 10, n = 20;
  15. }
  1. public class VarTest2 {
  2. System.out.println("***********引用数据类型:****************");
  3. Order o1 = new Order();
  4. o1.orderId = 1001;
  5. Order o2 = o1; //赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。
  6. System.out.println("o1.orderId = " + o1.orderId + ", o2.orderId = " +o2.orderId); // 1001, 1001
  7. o2.orderId = 1002;
  8. // 因为指向的是同一地址空间, 当o2修改该空间中的orderId后, o1的orderId也随之改变
  9. System.out.println("o1.orderId = " + o1.orderId + ", o2.orderId = " +o2.orderId); // 1002, 1002
  10. }
  11. }
  12. class Order {
  13. int orderId;
  14. }

二、针对于方法的参数概念

  • 形参:方法定义时,声明的小括号内的参数
  • 实参:方法调用时,实际传递给形参的数据

三、Java中参数传递机制:值传递

规则:

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。

推广:

  • 如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
  • 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

传递基本数据类型

  1. public class VarTest {
  2. public static void main(String[] args) {
  3. int m = 10;
  4. int n = 20;
  5. System.out.println("m = " + m + ", n = " + n);
  6. VarTest vt = new VarTest();
  7. vt.swap(m, n);
  8. System.out.println("m = " + m + ", n = " + n); // 10, 20;
  9. }
  10. public void swap(int m, int n){
  11. int temp = m;
  12. m = n;
  13. n = temp;
  14. // System.out.println("m = " + m + ", n = " + n); // 20, 10
  15. }
  16. }

Java值传递机制 - 图1

传递引用数据类型

  1. public class VarTest {
  2. public static void main(String[] args) {
  3. Data data = new Data();
  4. data.m = 10;
  5. data.n = 20;
  6. System.out.println("m = " + data.m + ", n = " + data.n);
  7. // int temp = data.m;
  8. // data.m = data.n;
  9. // data.n = temp;
  10. // System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10
  11. VarTest vt = new VarTest();
  12. vt.swap(data); // 传的是data的地址值; 它们指向的是同一块内存空间
  13. System.out.println("m = " + data.m + ", n = " + data.n);
  14. }
  15. public void swap(Data data) {
  16. int temp = data.m;
  17. data.m = data.n;
  18. data.n = temp;
  19. System.out.println("m = " + data.m + ", n = " + data.n); // 20, 10
  20. }
  21. }
  22. class Data {
  23. int m;
  24. int n;
  25. }

Java值传递机制 - 图2

练习

Java值传递机制 - 图3

内存图如下

Java值传递机制 - 图4