zoukankan      html  css  js  c++  java
  • 方法参数的值传递机制

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

    public static void main(String[] args) {
        // ********基本数据类型*****
        int m = 10;
        int n = m;
        System.out.println("m:" + m + "n:" + n);
        m = 20;
        System.out.println("m:" + m + "n:" + n);
        // ************引用数据类型***************
        Order o1 = new Order();
        o1.orderId = 1001;
    
        Order o2 = o1; // 创建的对象的地址值  赋给了o2 ,,都指向堆空间中同一个地址值
    
        o2.orderId = 1002;
        System.out.println(o1.orderId + "" + o2.orderId);
      }
    }
    
    class Order {
      int orderId;
    }
    

      

    方法的形参的传递机制,值传递
      1.形参:方法定义的时候,声明的小括号内的参数
      2.实参,方法调用的时候,实际传递给形参的数据
    结论:
      ①如果参数是基本数据类型  ,此时实参赋给形参是真实存储的数据值
      ②如果参数是引用数据类型 ,此时实参赋给形参的是实参存储数据的地址值
     
    public static void main(String[] args) {
        // 调换两个变量的值
        int m = 10;
        int n = 20;
        ValueTransferTest1 vtt = new ValueTransferTest1();
      // 调用方法 m,n没有调换 vtt.swap(m, n); System.out.println("m:" + m + "n:" + n); //m:10 n:20 } public void swap(int m, int n) { int temp = m; m = n; n = temp; }


    
    

      其中出现的问题是,调用  swap方法之后,上面的代码输出的是m=10,n=20,因为,在调用swap方法的时候,m,n已经调用成功,但是  swap 方法执行完成之后,就被销毁了,,,, 在main方法中的变量m,n依然有效,,所以输出m=10;n=20.

    内存解析:

    但是对于引用数据类型,内存解析
    
    
    
    由于赋的是地址值,所以调用swap方法交换成功后,输出 m=20;n=10.
  • 相关阅读:
    array_keys
    strval
    is_numeric
    php static延迟静态绑定
    page39 类的访问权限控制
    page34类的继承
    被遗忘在角落的类型检查函数
    2.2.5重写静态变量
    2.2.3使用parent作用域
    16个最棒的WordPress博客写作发布工具【博主桌面工具】
  • 原文地址:https://www.cnblogs.com/lxsfve/p/13138070.html
Copyright © 2011-2022 走看看