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

    形参

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

    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是一个局部变量,方法结束,在栈空间中就会被销毁

    实参

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

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

    传值调用

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

     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()时,最终值还是实参的初始化值,并没有被修改。值改变作用到了形参,而不会到实参

    传引用调用

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

     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.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。

    转自:

    https://www.cnblogs.com/yaoruozi/p/8569906.html

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/diandianquanquan/p/12522947.html
Copyright © 2011-2022 走看看