zoukankan      html  css  js  c++  java
  • Java值传递机制

    形参与实参

    形参:方法被调用时需要传递出来的参数

    实参:方法被调用时传入的实际值

    Java里方法的参数传递机制只有一种:值传递

    • 形参是基本数据类型,则将基本数据类型存储的“数据值”传给形参

    • 形参时引用数据类型,则将引用数据类型变量的“地址值”赋给形参

    基本数据类型

    • 流程:
    1. main方法进栈,m和n的初始化值分别为10和20,

    2. swap方法进栈,将m和n的值传入swap方法的形参中,并将swap方法里的m和n的值交换,输出swap方法里,m的值为10,n的值为10

    3. swap方法结束,弹栈,只剩下main方法里面的成员变量,输出交换结束后,变量m的值为20,n的值为10

    引用数据类型

    • 流程
    1. 首先main方法进栈,在执行Data d = new Data()时,JVM会创建一个Data()实例对象并在堆空间中开辟一块内存存储这个实例,同时把地址值(假设地址值为0x0011)赋值给d变量,由于Data类没有对m和n进行初始化,所以int类型默认值为0

    2. d.m=20d.n=20修改了原来的值使m=10,n=20

    3. swap方法进栈,形参data的值是main方法中swap(d)这条语句赋值过来,是地址值,所以也是0x0011,所以也指向那个实例

    4. swap方法又定义了一个局部变量tmp,只要是局部变量就放在栈空间,所以把tmp放在栈空间,并将m的值赋给它,tmp=10.然后把m和n的值交换,输出swap方法里,m的值为20,n的值为10

    5. swap方法结束,结束之后就弹栈

    6. 执行main方法里的输出语句,main方法还是指向那个实例,输出交换结束后,变量m的值为20,n的值为10

    static关键字

    看完后你可能会发现基本数据类型的代码main方法中有TransferTest1 t = new TransferTest1(),并且调用swap方法时是t.swap(m,n);

    而引用数据类型的代码块main方法中直接使用swap(d),这是因为定义swap方法时使用了static关键字

    static关键字的基本作用一句话来描述就是:

    方便在没有创建对象的情况下来进行调用(方法/变量)。

    很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

    所以第一块代码也可以写成


    public class TransferTest1 {
      public static void main(String[] args) {
        int m = 10;
        int n = 20;
        swap(m, n);
        System.out.println("交换结束后,变量m的值为" + m + "n的值为" + n);
        }
      public static void swap(int m, int n) {
        int tmp = m;
        m = n;
        n = tmp;
        System.out.println("swap方法里,m的值为" + m + "n的值为" + n);
      }
    }
    

  • 相关阅读:
    51nod 1127 最短的包含字符串
    hdu 2197 本原串
    hdu 2160 母猪的故事
    hdu 2594 Simpsons’ Hidden Talents
    自旋锁原理及java自旋锁
    Java中CAS详解
    dump相关
    多线程设置线程超时思路
    kafka遗忘点
    Java 和 HTTP 的那些事(四) HTTPS 和 证书(转)
  • 原文地址:https://www.cnblogs.com/codecheng99/p/12439831.html
Copyright © 2011-2022 走看看