0
点赞
收藏
分享

微信扫一扫

Java成员方法传参机制

书坊尚 2022-03-14 阅读 45

成员方法传参机制

  • 基本数据类型的传参机制

    • 结论: 基本数据类型, 传递的是值(值拷贝) , 形参的任何改变不影响实参

      package Hsp;

      public class Method {
      public static void main(String[] args) {
      int a = 10;
      int b = 20;
      // 创建AA对象 名字叫obj
      AA obj = new AA();
      obj.swap(a,b); //调用swap :交换
      System.out.println(“main方法: a=” + a + " b= " + b);
      }
      }

      class AA{
      public void swap (int a,int b){
      System.out.println("
      a和b交换前的值
      a=" + a + " b=" + b);
      //完成了a和b的交换
      int tmp = a;
      a = b;
      b = tmp;
      System.out.println("
      a和b交换后的值
      a=" + a + " b=" + b);
      }
      }

    • 内存分析法:

    1. 堆 : 一般存放基本数据类型(局部变量)

    2. 栈 : 存放对象(Cat cat,数组,引用数据类型等)

    3. 最后输出的 a,b的值是在main方法中,要找的是main方法中的a和b的值,而主函数中的a,b并没有发生交换,所以是 a = 10,b = 20
    4. swap方法中发生交换,但并不影响主方法中的交换,因为mian栈和swap是两个独立的空间,而且a、b都是基本数据类型,不是引用数据类型,所以不会影响到主方法中的a、b的值
  • 引用数据类型的传参机制

    • B 类中编写一个方法 test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?
      答案:会变化
      public class M2 {
          public static void main(String[] args) {
              B b = new B();
               int[] arr = {1, 2, 3};
               b.test100(arr);    //调用方法
               System.out.println(" main的 arr数组 ");
              //遍历数组
               for(int i = 0; i < arr.length; i++) {
               	System.out.print(arr[i] + "	");
               }
              System.out.println();
          }
      }
      
      class B {
          //B类中编写一个方法test100,
          //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
          public void test100(int[] arr) {
              arr[0] = 200;//修改元素
              //遍历数组
              System.out.println(" test100的 arr数组 ");
              for(int i = 0; i < arr.length; i++) {
                  System.out.print(arr[i] + "	");
              }
              System.out.println();
          }
      }
      
    • 内存分析法:

      1. 只要是调用一个方法就会产生一个新的栈
      2. 引用类型传递的是一个地址

      3. B 类中编写一个方法 test200,可以接收一个 Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?答案:会变化
        public class MethodParameter02 {
            public static void main(String[] args) {
                BB b = new BB();
        
                Person p = new Person();
                p.name = "xdr630";
                p.age = 22;
        
                b.test200(p);
                System.out.println("main 的 p.age=" + p.age); //10000
            }
        }
        class Person{
            String name;
            int age;
        }
        class B {
            public void test200(Person p){
                person.age = 10000;
            }
        }
        
      4. 结论:引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参

        public class Method02 {
            public static void main(String[] args) {
                BB b = new BB();
        
                Person p = new Person();
                p.name = "xdr630";
                p.age = 22;
        
                b.test200(p);
                System.out.println("main 的 p.age=" + p.age); //10000
            }
        }
        class Person{
            String name;
            int age;
        }
        class B {
            public void test200(Person p){
                p = null;
            }
        }
        
      5. 对应示意图

举报

相关推荐

0 条评论