美文网首页JAVA技术文
简单看懂方法的参数传递

简单看懂方法的参数传递

作者: 奕成 | 来源:发表于2019-03-15 23:34 被阅读0次
    pankaj-patel-1366018-unsplash.jpg

    方法的参数传递


    一.方法的参数传递:

    <1>参数分为哪几种?
    1.实参;2.形参;

    <2>什么是实参,什么是形参?
    假设现在你有一支钢笔,钢笔的外壳就是形参,是不变的。而墨水则是实参,是需要用的。

    <3>实参具体位置在哪里?形参位置具体在哪里?
    下面看一段代码:

    1. public class test1{
    2.
    3.   public static void main(String[] args){
    4.           
    5.           Test t1 = new Test();
    6.           
    7.          //s1 和 s2 是实参 
    8.           int s1 = 1;
    9.           int s2 = 2;
    10.           
    11.           System.out.println("s1:" + s1 + ", s2" + s2);
    12.           
    13.           //调用swap()方法时,传入实参的值
    14.           t1.swap(s1,s2);
    15.           
    16.           System.out.println("s1:" + s1 + ", s2" + s2);
    17.           
    18.           /*swap(int s1,int s2) s1 和 s2 是形参
    19.           *形参的命名是任意,也可以和实参一样。
    20.           */
    21.           public void swap(int s1,int s2){
    22.                 
    23.                 int temp = i;
    24.                 i = j;
    25.                 j = temp;
    26.                 
    27.           }
           
    

    输出结果为:

    s1:1, s2:2
    s1:2, s2:1

    总结:
    1.形参:方法声明时,方法小括号内是形参。
    2.实参:调用方法时实际传入参数的值。


    二.规则:java中的参数传递机制:值传递机制

    <1>形参是基本数据类型:将实参的值传递给形参的基本数据类型的变量

    <2>形参是引用数据类型:将实参的引用类型变量的值(对应的堆空间的对象的首地址值)传递给形参的引用类型变量。

    第一个形参是基本数据类型时,实参的数值传递传递给形参,上面的代码是一个案例了。


    现在来说说第二个,当形参为引用数据类型的情况。

    先举个栗子,便于读者理解:

    小明和小华现在有同时共有一辆玩具车,可以把玩具车理解为对象首地址值共有可以理解为一个指针,小明和小华同时指向玩具车,而小明不喜欢玩具车轮子的型号,背着小华偷偷的把轮子型号换了。

    这时小华不知道车轮被小明换了。轮子是玩具车的一部分,对象首地址值就是玩具车,轮子就是首地址值指向的数值,现在数值被改变了。

    先看这段代码:

    1.public class test2{
    2.   
    3.   //创建一个swap()方法,形参为DateSwap类型的 ds
    4.   public void swap(DateSwap ds){
    5.   
    6.   int temp = ds.i;
    7.   ds.i = ds.j;
    8.   ds.j = ds.temp;
    9.   
    10.   
    11.   }
    12.   
    13.   //创建一个静态类
    14.   static void DateSwap{
    15.   
    16.     int i = 1;
    17.     int j = 2;
    18.   
    19.     }
    20.     
    21.   //主方法main()
    22.   public static void main(String[] args){
    23.   
    24.   //创建对象t1
    25.   Test1  t1 = new Test1();
    26.   
    27.   DateSwap ds = new DateSwap();
    28.   
    29.   //调用swap()方法
    30.   t1.swap(ds);
    31.   
    32.   System.out.println("ds.i" + ds.i + "ds.j" + ds.j);
    33.   
    34.  
    35.   }
    36.   
    37.}
    
    ED092BFF73EA705087577F184B86571A.png-92.9kBED092BFF73EA705087577F184B86571A.png-92.9kB

    在栈区中开辟了两个方法,分别把main()看成小明,swap()看成小华,new出来的对象的首地址值看成玩具车,静态DateSwap类中初始化的 i 和 j 是轮子,现在把轮子型号做了个交换。

    注意:

    引用数据类型的值其中只要一改变,原值就会跟着改变,而基本数据类型是其中一个改变,原值不改变。

    就像你去复印一份资料,复印件你怎么画都行,原件内容始终是不变的,而引用数据类型是,你拿去复印时,不小心被帮你复印的人弄了几笔上去,原件内容也就改变了。

    s1 和 s2 是基本数据类型,s1 和 s2 被交换后,原来的s1 和 s2 保持不变,可以拿第一个代码对比第二个代码看。

    如果你喜欢这篇文字,可关注微信公众号:wu_you_lT,有深度好文等你阅读哦!

    相关文章

      网友评论

        本文标题:简单看懂方法的参数传递

        本文链接:https://www.haomeiwen.com/subject/huqdmqtx.html