首页 > 其他分享 >方法的形参和实参

方法的形参和实参

时间:2024-08-09 14:52:26浏览次数:6  
标签:5.2 调用 形参 int 方法 实参 data

5.2 方法的形参和实参


目录

形参与实参对应两种类型:值类型与引用类型

  • 值类型:包括8种基本类型(byte、short、int、long、double、float、char、boolean)+ String
  • 引用类型:数组、类、接口等类型。

注意String类型,这个比较特殊,它是存储在常量池中的,你可以把它近似看成值类型的。因为它的值一旦确定,就无法改变。

  • 为值类型时,形参方法内的参数值改变,并不会影响到实参的值。
  • 为引用类型时,形参方法内的参数值改变时,会影响到实参的值。注意是地址所指向的堆中的值,如果形参的地址改变了,那么这个改变不会影响到实参。

5.2.1 形参

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

public void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a:" + a + " b:" + b);
}

这里边的a,b就是形参,temp是一个局部变量,方法结束,在栈空间中就会被销毁

5.2.2 实参

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

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

5.2.3 传值调用

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

public class Transform {

  public static void main(String[] args) {
    int i = 10;
    int j = 5;
    System.out.println("i: " + i + ", j: " + j);
    Transform.swap(i, j);
    System.out.println("i: " + i + ", j: " + j);
  }

  private static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    System.out.println("a: " + a + ", b: " + b);
  }
}

运行结果:

i: 10, j: 5
a: 5, b: 10
i: 10, j: 5

这里我们写了一个实现两个 int 型数据交换的方法,并且在 main() 方法中调用,然而结果却并不是我们想要的。

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

5.2.4 传引用调用

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

/*
    参数传递:
    形参:方法声明时,方法小括号内的参数
    实参:调用方法时,实际传入的参数值
    java中传递值得机制:
    形参是基本数据类型的: 将实参的值传递给实参的基本数据类型的变量
    形参是引用数据类型的: 将实参的引用类型的值(即在堆空间中生成的首地址的值)传递给形参的引用类型的变量
*/
public class Test {

  public static void main(String[] args) {
    Test t = new Test();
    Data data = new Data();
    System.out.println("data.i: " + data.i + ", data.j:" + data.j);
    // 调用
    Test.swap(data);
    System.out.println("data.i: " + data.i + ", data.j:" + data.j);
  }

  private static void swap(Data data) {
    int temp = data.i;
    data.i = data.j;
    data.j = temp;
  }
}

class Data {
  int i = 10;
  int j = 5;
}

形参部分直接传进去了一个对象,相当于堆空间的首地址值得引用

运行结果:

data.i: 10, data.j:5
data.i: 5, data.j:10

5.2.5 总结

  • java的基本数据类型是传值调用,引用类型是传引用调用;
  • 当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参;
  • 当传引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会对应改变实参对象的内容。

标签:5.2,调用,形参,int,方法,实参,data
From: https://www.cnblogs.com/hweiling/p/18350742

相关文章

  • 方法的作用及定义
    5.1方法的作用及定义目录5.1方法的作用及定义5.1.1方法的作用5.1.2方法的定义5.1.3方法调用5.1.4静态方法5.1.1方法的作用一、什么是方法呢?Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被......
  • php+html5+ajax实现上传图片的方法
    test.php<?phpif(isset($_POST['upload'])){var_dump($_FILES);move_uploaded_file($_FILES['upfile']['tmp_name'],'up_tmp/'.time().'.dat');exit;}?>html<!doctypehtml><htmllang......
  • Python按条件删除Excel表格数据的方法
      本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。  其中,Ex......
  • Python 提取出SQL语句中Where的值的方法
    1.方法一:使用sqlparse库的方法为了提取SQL语句中WHERE子句的值,我们可以利用Python的sqlparse库,这是一个专门用于解析SQL语句的库。以下是一个示例代码,演示如何使用sqlparse来提取WHERE子句中的条件。首先,确保安装了sqlparse库。如果未安装,可以使用pip安装:bash复制代码pipins......
  • 用echarts绘制图表时,横坐标数据太多显示不全/堆叠的解决方法
    一、横坐标数据过多可能出现的问题1、横坐标文字堆叠2、横坐标显示不全(数据2,数据4,数据6,数据8,数据10,数据12,数据14均没有显示出来)二、解决方法1、使用rotate属性给echarts的横坐标标签设置旋转角度xAxis:{type:'category',data:xAxis,......
  • 12-python函数的传参——形参、实参、装包 *args和**kwargs
    函数的参数1形参和实参函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数):在函数定义时指定了形参,在调用的时......
  • 搜索之meet in middle(有效的小方法)
    题目:[https://www.luogu.com.cn/problem/P2962](P2962[USACO09NOV]LightsG)算法:meetinmiddle(折半搜索)思路:有\(35\)个点,总共的操作状态有\(2^{35}\)种情况。如果我们采用一般的搜索方式,时间上会毫不犹豫得爆掉。所以,我们要用折半搜索的方式。将所有的点拆分成两个集合,对......
  • 预训练语言模型公平性-公平性度量、去偏方法
    一、内在偏见与外在偏见1、内在偏见:训练前数据集中存在的刻板印象;2、外在偏见:用来衡量偏差如何在下游任务中传播。通常包括微调,然后评估其关于性别和种族等敏感属性的表现;3、许多NLP应用程序对现有的语言模型进行了微调,这些模型将外在偏见和内在偏见交织在一起。......
  • 关于C#的Dynamic调用方法前的一些准备的小Demo
    usingSystem;usingSystem.CodeDom.Compiler;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp1{publicclassTest{publicstaticTestT......
  • Docker Desktop 出现 Unable to calculate image disk size 错误提示的解决方法
    Win11安装了DockerDestop,版本为4.25.2。DockerDesktop能随系统启动而启动,其内部管理的容器也可以正常启动,但是不和谐的地方也出现了:在从通知区域双击DockerDesktop的图标后,它就会出现如下错误信息,虽不影响使用,但是相当碍眼:  解决方案:【1】进入设置,关闭“UsetheWSL2......