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

方法的实参和形参

时间:2024-08-03 14:31:29浏览次数:12  
标签:形参 对象 传递 引用 实参 方法

方法的实参和形参

一、实参(Actual Parameters)
  1. 定义:实参是在调用方法时传递给方法的实际值或对象的引用。
  2. 位置:实参位于方法调用语句中。
  3. 作用:实参用于传递数据给方法内部使用。
  4. 类型:实参可以是基本数据类型(如int、double等)或对象引用。
  5. 数量:调用方法时提供的实参数量必须与方法定义中的形参数量一致。

实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。

二、形参(Formal Parameters)
  1. 定义:形参是在方法定义中用于接收传入值的变量。
  2. 位置:形参位于方法的括号内,是方法签名的一部分。
  3. 作用:形参作为方法内部的局部变量,用于存储传入的实参值。
  4. 类型:形参具有特定的数据类型,可以是任何有效的Java类型。
  5. 数量:方法定义中的形参数量决定了调用时需要提供实参的数量

形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。

实例:
// 方法定义
public void printSum(int num1, int num2) {
    // num1 和 num2 是形参
    int sum = num1 + num2;
    System.out.println("The sum is: " + sum);
}

// 方法调用
printSum(5, 10); // 5 和 10 是实参
注意:
  • 在值传递调用过程中,只能把实参传递给形参,而不能把形参的值反向作用到实参上。在函数调用过程中,形参的值发生改变,而实参的值不会发生改变。
  • 而在引用传递调用的机制中,实际上是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。
  • 实参和形参的类型必须匹配或兼容。
  • 实参可以是常量、变量、表达式或任何产生所需类型值的结果。
  • 方法重载时,可以通过改变形参的数量或类型来定义多个同名方法
三、在Java中,方法参数的传递主要分为两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。
1.值传递(Pass by Value)
  1. 基本数据类型:对于Java的8种基本数据类型(int, double, float, boolean, char, byte, short, long),方法参数传递是通过值传递的。这意味着当一个基本数据类型的变量作为参数传递给方法时,实际上是传递了这个变量的值的副本。

  2. 行为:在方法内部对参数的修改不会影响到原始变量的值。

  • 示例(值传递):
void increment(int value) {
    value++;
}

int main() {
    int a = 10;
    increment(a);
    System.out.println(a); // 输出 10,increment 方法中的修改不影响 a 的值
    return 0;
}
引用传递(Pass by Reference)
  1. 对象引用:对于对象(引用数据类型),方法参数传递的也是引用的值,即对象在内存中的地址。但Java实际上是通过值传递这个引用的副本。

  2. 行为

    • 方法内部可以通过这个引用访问和修改对象的状态(对象的字段)。
    • 方法内部不能修改引用本身的值,即不能将这个引用指向一个新的对象。
  • 示例(引用传递):
void changeContent(String[] array, int index, String newValue) {
    array[index] = newValue; // 可以修改对象的状态(数组的内容)
}

int main() {
    String[] myArray = {"Hello", "World"};
    changeContent(myArray, 1, "Java");
    System.out.println(myArray[1]); // 输出 "Java",数组内容被修改

    // 尝试修改引用本身
    changeContent(myArray, 1, new String("New Java"));
    System.out.println(myArray[1]); // 仍然输出 "Java",引用本身未被修改
    return 0;
}
重要区别
  • 值的修改:基本数据类型的参数在方法内部的修改不会影响到原始值。对象引用的参数在方法内部可以修改对象的状态,但不能修改引用本身指向。

  • 内存地址:基本数据类型的参数不会传递内存地址。对象引用的参数传递的是对象在内存中的地址的副本。

    方法的实参和形参的区别:
    特性 实参 形参
    定义 方法调用时实际传递的值 方法定义时的参数变量
    位置 出现在方法调用语句中 出现在方法的参数列表中
    作用 向方法提供具体的数据或引用 接收方法调用时传递的数据或引用
    访问 直接访问实参值或对象引用 通过形参变量访问
    作用域 调用结束后生命周期结束 仅限于方法内部
    与对象的关系 可以是对象的属性或对象本身 作为局部变量,不直接与对象实例关联
    个数要求 必须与形参数量一致 定义时确定
    初始值 由调用者在调用时赋值 由方法接收实参的值进行初始化
    修改影响 实参本身不会被方法内的修改影响 形参的修改不会影响到实参(基本数据类型)
    引用传递 对象引用的实参可以影响对象本身 形参是对象引用的副本,不能重新赋值指向其他对象

标签:形参,对象,传递,引用,实参,方法
From: https://www.cnblogs.com/lnnnkq/p/18340444

相关文章

  • 方法的定义
    方法的基本定义(将功能重复的代码封装成一段独立的代码,通过调用的方式以提高代码的复用性(减少代码重复))限制条件:在主类中定义,并且由主方法直接调用的方法形式。方法就是一段可以被重复调用的方法块。在Java中要想进行方法的定义,则可以使用如下的语法完成。publicstatic返回类......
  • 方法的重载
    方法的重载(在同一个类中,有一个以上的同名方法)指得是一个类在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(methodoverloading)。参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。......
  • 编程实现模重复平方法的算法
    模重复平方法(又称为平方法)是一种用于求解非线性方程的迭代算法。算法的基本思路是通过不断迭代替换变量的方式,将非线性方程转化为线性方程,从而求解方程的根。以下是一个编程实现模重复平方法的算法的示例:```pythondeffixed_point_iteration(f,x0,epsilon,max_iterations)......
  • 方法的作用
    方法的作用Java中方法(Method)的作用非常广泛,它们是面向对象编程的核心概念之一方法在Java中的一些主要作用:封装行为:方法允许将特定的行为封装在代码块中,这有助于组织和模块化程序。提高代码重用性:通过定义通用的方法,可以在不同的上下文中重复使用相同的代码,避免重复......
  • coreseek4.1使用sphinx做索引的索引控制shell脚本及逻辑 及 linux安装coreseek4.1的sp
    一、coreseek4.1使用sphinx做索引的索引控制shell脚本及逻辑    sphinx做索引时索引数据来源可以有多种方式,比如数据库mysql,pgsql,mssql,odbc,也可以是python脚本,也可以是xml数据文件,xmlpipe(publish:November1,2017-Wednesday)。    一般来说,如果索引的数据比较简单,......
  • nodejs使用child_process模块启动(exec和spawn)子线程任务,子进程实例的kill()方法无效的
    以下内容在win10环境下的执行分析(这里就不对进程和线程做区分了):child_process.exec和child_process.spawn启动进程的区别。shell<string>Shelltoexecutethecommandwith.SeeShellrequirementsandDefaultWindowsshell.Default:'/bin/sh'onUnix,process.env.C......
  • JavaScript实现tab栏切换 jquery实现tab栏切换 的方法的对比
    这个例子比较简单,但却很实用,当然实际工作中我们一般不会这样去写,我们通常会把以此为基础去封装一个可重用的控件,但基本思想不变。JavaScript实现tab栏切换在JavaScript中实现Tab切换的基本逻辑是通过监听每个Tab的点击事件,然后隐藏所有的内容区域,并显示对应于点击的Tab的......
  • C#:通用方法总结—第11集
    大家好,今天继续分享我们的通用方法系列。下面是今天要分享的通用方法:(1)这个通用方法为Ug’校验选中体的个数: ///<summary>   ///输出选中体个数   ///</summary>   publicintCheckOneBody()   {       intselcount=0;      ......
  • JS阻止事件冒泡的方法
    JS事件冒泡在一个对象上触发某类事件(如单击onclick事件),如果此对象定义了此事件的处理程序,此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的......
  • java之方法引用 —— ::
    目录一、简介二、引用静态方法 1.格式  2.示例​编辑3.条件解析  三、引用成员方法1.格式 2.示例 四、引用构造方法 1.格式 2.示例五、类名引用成员方法1.格式2.略微不同的方法引用规则 3.示例六、引用数组的构造方法 1.格式2.示例一、简介......