java中的形参与实参的区别对比解析

 更新时间:2025年11月06日 10:05:46   作者:上78将  
文章讲述了Java中形参和实参的区别,包括定义位置、作用阶段、内存分配和示例说明,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、主体不同

1、实参:在调用有参函数时,函数名后面括号中的参数为“实际参数”。

2、形参:不是实际存在变量,又称虚拟变量。

二、目的不同

1、实参:可以是常量、变量或表达式,无论实参是何种类型的量,才进行函数调用时,都必须具有确定的值,以便把这些值传递给形参。

2、形参:定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。

三、特点不同

1、实参:在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。值在函数调用期间有效,可以参加该函数中的运算。

2、形参:形参的本质是一个名字,不占用内存空间。

形参与实参的概念

形参(形式参数)是方法定义时声明的参数,用于接收调用时传入的值。形参属于方法的局部变量,作用域仅限于方法内部。

实参(实际参数)是调用方法时传递给形参的具体值或变量,可以是常量、变量或表达式。

主要区别

定义位置不同
形参出现在方法声明中,例如:

public void print(int num) { ... }  // num是形参

实参出现在方法调用时,例如:

print(10);  // 10是实参

作用阶段不同
形参在方法定义阶段声明,用于描述方法需要的数据类型和名称。
实参在方法调用阶段传递,为形参提供具体的值。

内存分配不同
形参在方法被调用时分配内存(栈内存),方法结束后释放。
实参可以是已存在的变量或常量,其内存分配与形参无关。

示例说明

public class Example {
    // 形参:a和b
    public static int add(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        int x = 5, y = 3;
        // 实参:x和y
        int result = add(x, y);
        System.out.println(result);  // 输出8
    }
}

注意事项

  • 形参和实参的类型必须匹配或兼容(支持隐式类型转换)。
  • 基本数据类型传递的是值的副本(值传递),形参修改不影响实参。
  • 引用数据类型传递的是引用的副本,形参和实参指向同一对象,通过形参修改对象会影响实参引用的对象。

值传递与引用传递的区别

值传递示例(基本数据类型)

public static void change(int num) {
    num = 100;
}
public static void main(String[] args) {
    int a = 10;
    change(a);
    System.out.println(a);  // 输出10(未改变)
}

引用传递示例(对象类型)

public static void modifyArray(int[] arr) {
    arr[0] = 99;
}
public static void main(String[] args) {
    int[] array = {1, 2, 3};
    modifyArray(array);
    System.out.println(array[0]);  // 输出99(已改变)
}

形参与实参的概念

形参(形式参数)是方法定义时声明的参数,用于接收调用时传入的值。形参属于方法的局部变量,作用域仅限于方法内部。

实参(实际参数)是调用方法时传递给形参的具体值或变量,可以是常量、变量或表达式。

主要区别

定义位置不同
形参出现在方法声明中,例如:

public void print(int num) { ... }  // num是形参

实参出现在方法调用时,例如:

print(10);  // 10是实参

作用阶段不同
形参在方法定义阶段声明,用于描述方法需要的数据类型和名称。
实参在方法调用阶段传递,为形参提供具体的值。

内存分配不同
形参在方法被调用时分配内存(栈内存),方法结束后释放。
实参可以是已存在的变量或常量,其内存分配与形参无关。

示例说明

public class Example {
    // 形参:a和b
    public static int add(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        int x = 5, y = 3;
        // 实参:x和y
        int result = add(x, y);
        System.out.println(result);  // 输出8
    }
}

注意事项

  • 形参和实参的类型必须匹配或兼容(支持隐式类型转换)。
  • 基本数据类型传递的是值的副本(值传递),形参修改不影响实参。
  • 引用数据类型传递的是引用的副本,形参和实参指向同一对象,通过形参修改对象会影响实参引用的对象。

值传递与引用传递的区别

值传递示例(基本数据类型)

public static void change(int num) {
    num = 100;
}
public static void main(String[] args) {
    int a = 10;
    change(a);
    System.out.println(a);  // 输出10(未改变)
}

引用传递示例(对象类型)

public static void modifyArray(int[] arr) {
    arr[0] = 99;
}
public static void main(String[] args) {
    int[] array = {1, 2, 3};
    modifyArray(array);
    System.out.println(array[0]);  // 输出99(已改变)
}

到此这篇关于java中的形参与实参的区别的文章就介绍到这了,更多相关java形参与实参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Java+SSM实现电影院购票系统

    基于Java+SSM实现电影院购票系统

    今天小编给大家带来一款SSM的电影院售票系统,非常不错的一个项目,是学习​javaweb编程必备。文中的示例代码讲解详细,需要的可以参考一下
    2022-04-04
  • win10安装rabbitMQ的详细步骤

    win10安装rabbitMQ的详细步骤

    RabbitMQ是一个开源的消息中间件(Message Broker),它基于AMQP协议设计,用于在分布式系统中实现消息的高效、可靠传输,本文给打击介绍了win10安装rabbitMQ的详细步骤,文中通过图文讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • 使用Java实现二维码生成与扫码验证功能

    使用Java实现二维码生成与扫码验证功能

    在现代软件开发中,二维码被广泛应用于各种场景,例如支付、预约、身份验证等,本篇文章将以 Java 为例,介绍如何实现二维码的生成以及扫码验证的功能,需要的朋友可以参考下
    2025-08-08
  • SpringBoot下载docx文档方式

    SpringBoot下载docx文档方式

    这篇文章主要介绍了SpringBoot下载docx文档方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • SpringSecurity实现登陆认证并返回token方式

    SpringSecurity实现登陆认证并返回token方式

    这篇文章主要介绍了SpringSecurity实现登陆认证并返回token方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • SpringBoot3.x与MyBatis-Plus兼容问题小结

    SpringBoot3.x与MyBatis-Plus兼容问题小结

    SpringBoot3.2+版本使用MyBatis-Plus时,出现等类型不匹配/依赖冲突报错,下面就来详细的介绍一下SpringBoot3.x与MyBatis-Plus兼容问题小结,感兴趣的可以了解一下
    2026-04-04
  • Spring Bean的初始化和销毁实例详解

    Spring Bean的初始化和销毁实例详解

    这篇文章主要介绍了Spring Bean的初始化和销毁,结合实例形式详细分析了Spring Bean的初始化和销毁相关配置、使用方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • Java线程活锁的实现与死锁等的区别

    Java线程活锁的实现与死锁等的区别

    活锁是一种递归情况,其中两个或更多线程将继续重复特定的代码逻辑,本文主要介绍了Java线程活锁的实现与死锁等的区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Java正则表达式之分组和替换方式

    Java正则表达式之分组和替换方式

    这篇文章主要介绍了Java正则表达式之分组和替换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • mybatis-plus自动生成代码的示例代码

    mybatis-plus自动生成代码的示例代码

    这篇文章主要介绍了mybatis-plus自动生成代码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论