zoukankan      html  css  js  c++  java
  • day19 ★值传递机制(最好在内存图中理解)

    package com.atguigu.java1;
    /*
    *
    * 关于变量的赋值:
    *
    * 如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
    * 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
    *
    */
    public class ValueTransferTest {

    public static void main(String[] args) {

    System.out.println("***********基本数据类型:****************");
    int m = 10;
    int n = m;

    System.out.println("m = " + m + ", n = " + n);

    n = 20;

    System.out.println("m = " + m + ", n = " + n);

    System.out.println("***********引用数据类型:****************");

    Order o1 = new Order();
    o1.orderId = 1001;

    Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体

    System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

    o2.orderId = 1002;

    System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

    }

    }

    class Order{

    int orderId;

    }

    /*
    * 方法的形参的传递机制:值传递        
    *
    * 1.形参:方法定义时,声明的小括号内的参数
    * 实参:方法调用时,实际传递给形参的数据
    *
    * 2.值传递机制:
    * 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
    * 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
    *
    */
    public class ValueTransferTest1 {
    public static void main(String[] args) {

    int m = 10;
    int n = 20;

    System.out.println("m = " + m + ", n = " + n);
    //交换两个变量的值的操作
    // int temp = m ;
    // m = n;
    // n = temp;

    ValueTransferTest1 test = new ValueTransferTest1();
    test.swap(m, n);

    System.out.println("m = " + m + ", n = " + n);


    }


    public void swap(int m,int n){           //这里的mn是新的变量。名称和上面一样而已   这方法执行完就销毁出栈了,所以在main()中的值没变,还是10,20
    int temp = m ;
    m = n;
    n = temp;
    }
    }

    参数是引用数据类型:

    public class ValueTransferTest2 {

    public static void main(String[] args) {

    Data data = new Data();

    data.m = 10;
    data.n = 20;

    System.out.println("m = " + data.m + ", n = " + data.n);

    //交换m和n的值
    // int temp = data.m;
    // data.m = data.n;
    // data.n = temp;

    ValueTransferTest2 test = new ValueTransferTest2();
    test.swap(data);


    System.out.println("m = " + data.m + ", n = " + data.n);      //swap方法中的mn和main的mn指向的是堆空间中同一个对象。so可以实现互换

    }

    public void swap(Data data){
    int temp = data.m;
    data.m = data.n;
    data.n = temp;
    }

    }

    class Data{

    int m;
    int n;

    }

  • 相关阅读:
    [转]sql语句优化原则
    [Effective C++]构造/析构/赋值运算
    [Effective C++]定制new和delete
    [Effective C++]让自己习惯C++
    [C++ primer]联合:节省空间的类
    [C++ primer]类成员指针
    [C++ primer]运行时类型识别(RTTI)
    [APUE]fork后子进程的运行情况
    [C++ primer]优化内存分配
    [C++ primer]虚函数和纯虚函数
  • 原文地址:https://www.cnblogs.com/wangyanbin2333/p/13499071.html
Copyright © 2011-2022 走看看