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.
  • 相关阅读:
    spinner下拉列表数据的添加
    inflater的简单使用
    json对象和json数组的简单转化
    线程之间的通讯
    根据网页地址获取页面内容
    ExtJS4 嵌套的border layout
    sql server Truncate清空表内数据,并对自增长列重置归零重新计算
    C# 将多个DLL和exe合成一个exe程序
    ExtJS4 border layout 左侧treePanel 中间 panel
    BugFree 3.0.4 一些操作
  • 原文地址:https://www.cnblogs.com/lxsfve/p/13138070.html
Copyright © 2011-2022 走看看