zoukankan      html  css  js  c++  java
  • java中参数传递机制---形参和实参

    1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。

    1  public void swap(int a, int b) {
    2         int temp = a;
    3         a = b;
    4         b = temp;
    5         System.out.println("a:" + a + " b:" + b);
    6     }
    7 
    8 这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁

     

    2.实参:传递给被调用方法的值,预先创建并赋予确定值。

    1 调用上面的
    2 swap(1,2);
    3 其中1和2就是实际的参数值,就叫实参

     

    3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。

     1 public class TestArgsTransform {
     2     public static void main(String[] args) {
     3         int i = 10;
     4         int j = 5;
     5         TestArgsTransform tt = new TestArgsTransform();
     6         System.out.println("i:" + i + " j:" + j);
     7         tt.swap(i, j);
     8         System.out.println("i:" + i + " j:" + j);
     9 
    10 
    11     }
    12 
    13     public void swap(int a, int b) {
    14         int temp = a;
    15         a = b;
    16         b = temp;
    17         System.out.println("a:" + a + " b:" + b);
    18     }
    19 
    20 
    21 }
    22 这里我们写了一个基本的数据类型,实现两个int型数据交换的方法,并且在main()方法中调用,然而结果却并不是我们想要的

    运行结果如下图所示:

    就是因为基本数据类型是属于传值调用,当我们要实现交换时,方法内可以完成交换,只是实参进行了交换,方法结束,栈空间中就会销毁swap()方法内的局部变量,所以当调用swap()时,最终值还是实参的初始化值,并没有被修改。值改变作用到了形参,而不会到实参

    4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。

     1 package com.argstransform;
     2 //参数传递:
     3 //形参:方法声明时,方法小括号内的参数
     4 //实参: 调用方法时,实际传入的参数值
     5 
     6 //java中传递值得机制:
     7 //形参是基本数据类型的: 将实参的值传递给实参的基本数据类型的变量
     8 //形参是引用数据类型的: 将实参的引用类型的值(即在堆空间中生成的首地址的值)传递给形参的引用类型的变量
     9 
    10 public class TestDemo1 {
    11     public static void main(String[] args) {
    12         TestDemo1 td = new TestDemo1();
    13         Data data = new Data();
    14         System.out.println("data.i:"+data.i+" data.j:"+data.j);
    15         //调用
    16         td.swap(data);
    17         System.out.println("data.i:"+data.i+" data.j:"+data.j);
    18 
    19     }
    20 
    21     public void swap(Data data) {
    22         int temp = data.i;
    23         data.i = data.j;
    24         data.j = temp;
    25     }
    26 }
    27 
    28 class Data {
    29     int i = 10;
    30     int j = 5;
    31 }
    //形参部分直接传进去了一个对象,相当于堆空间的首地址值得引用

    运行结果:

     

     总结:

    1.java的基本数据类型是传值调用,对象引用类型是传引用。

    2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。

    3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。

     

  • 相关阅读:
    CRM 2016 刷新 Iframe
    CRM 2016 升级CRM365之注意事项
    CRM 插件导出
    [LeetCode]Valid Sudoku
    [iOS]转:iOS最佳实践
    [LeetCode]Permutation Sequence
    [C/C++]函数可变参数表
    [LeetCode]Next Permutation
    [LeetCode]Remove Element
    [LeetCode]4Sum
  • 原文地址:https://www.cnblogs.com/yaoruozi/p/8569906.html
Copyright © 2011-2022 走看看