Java————形参和实参

news2025/1/12 4:06:54

方法的形参相当于数学函数中的自变量,比如:
在这里插入图片描述
Java中方法的形参就相当于sum函数中的自变量n,
用来接收sum函数在调用时传递的值的。

形参的名字可以随意取,对方法都没有任何影响,
形参只是方法在定义时需要借助的一个变量,
用来保存方法在调用时传递过来的值。

public static int getSum(int N){    // N是形参
    return (1+N)*N / 2;

}

getSum(10);      // 10是实参,在方法调用时,形参N用来保存10
getSum(100);     // 100是实参,在方法调用时,形参N用来保存100
public static int add(int a, int b){
    return a + b;

}

add(2, 3);   // 2和3是实参,在调用时传给形参a和b

在Java中,实参的值永远都是拷贝到形参中,
形参和实参本质是两个实体。

public class TestMethod {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        swap(a, b);
        System.out.println("main: a = " + a + " b = " + b);
    }

 
    public static void swap(int x, int y) {
        int tmp = x;
        x = y;
        y = tmp;
        System.out.println("swap: x = " + x + " y = " + y);
    }

}


// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20

可以看到,在swap函数交换之后,形参x和y的值发生了改变,
但是main方法中a和b还是交换之前的值,即没有交换成功。

原因:
对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用。

实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,
而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,

因此:实参a和b 与 形参x和y是两个没有任何关联性的变量
在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y
因此对形参x和y操作不会对实参a和b产生任何影响。

解决办法:
传引用类型参数。


public class TestMethod {
    public static void main(String[] args) {
        int[] arr = {10, 20};
        swap(arr);
        System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
    }

 

    public static void swap(int[] arr) {
        int tmp = arr[0];
        arr[0] = arr[1];
        arr[1] = tmp;
    }

}


// 运行结果
arr[0] = 20 arr[1] = 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty笔记

NIO介绍 全程java non-blocking IO,是JDK提供的新API。从1.4开始,提供了一系列改进的输入、输出特性,被统称为NIO,即同步非阻塞NIO相关类放到了java.nio下,并且对原java.io包中的很多了进行了改写NIO三大组件:Channel…

linux-如何用起来ubuntu

1 Oracle VM VirtualBox安装ubuntu20.04虚拟机 【工具】->【新建】 1.1 虚拟电脑名称和系统类型 【名称】:自定义名称即可 【文件夹】:虚拟机文件将要存储的路径 【虚拟光盘】:将要安装的虚拟机iso文件 1.2 自动安装 【用户名】&…

[Qt]多线程和套接字通信

文章目录 1. 多线程的使用1.1 线程类 QThread1.1.1 常用共用成员函数1.1.2 信号槽1.1.3 静态函数1.1.4 任务处理函数 1.2 使用方式11.2.1 操作步骤1.2.2 示例代码 1.3 使用方式21.3.1 操作步骤1.3.2 示例代码 2. 线程池的使用2.1 QRunnable2.2 QThreadPool 3. 套接字通信3.1 QT…

硬件故障诊断:快速定位问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Python编程——for循环基础语法、range语句以及一些案例

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 前言 在之前的文章我们讲解过 while 循环,除了w…

基于ASCON的AEAD

1. 引言 前序博客: ASCON:以“慢而稳”赢得NIST轻量级加密算法标准密码学中的AEAD(authenticated encryption with associated data) 对称密钥加密过去数年来已发生改变,具体为: 当今主要使用stream ciphers,因其比…

微信小程序 动漫游戏资讯推荐系统

配置文件 (自动编号、配置参数名称、配置参数值); 系统的设计与实现采用Spring、SpringMVC和MyBatis作为主体框架,系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。系统的设计与实现主要实现角色有管理员和用户,管…

预训练相关知识

1、上下文无关语义表示方式存在问题 语义不同的词具有相同的表示,(apple 电子产品苹果/水果苹果) 容易出现oov问题 2、神经语言编码器 2.1、序列模型 cnn/rnn等,捕获局部信息和序列依赖信息,无法捕获长距离依赖。易训…

【JavaScript】HTML文件插入JavaScript函数

介绍 在HTML文件中插入JavaScript函数的方法如下&#xff1a; 1、在HTML文件中使用<script>标签来定义JavaScript函数&#xff0c;例如&#xff1a; <script> function myFunction() {// 在这里编写JavaScript函数代码 } </script>2、在HTML文件中调用Jav…

2023年稀有金属行业研究报告

第一章 行业概况 稀有金属是一类在地球上分布较为稀少或从原矿中分离较为困难的金属。这类金属包括稀土、锂、钼、钨、铟、钛等。由于其独特的物理和化学性质&#xff0c;稀有金属在许多高技术领域中都是不可或缺的材料&#xff0c;如航天、原子能、电子和国防等。 稀有金属在…

小红书加密参数X-s详解

小红书加密参数X-s详解 小红书加密参数X-s详解 省略调试过程 定位到相关文件 如图所示&#xff1a; 修改代码 将代码复制下来&#xff0c;找到以下代码&#xff1a; , function(p0, p1, p2, p3, p4, p5, p6) {var _ace_25a6 _ace_ae44(p0, p1), _ace_d2389 _ace_34d1(p2…

Windows下编译安装FreeCAD 0.21

本文记录在Windows下编译安装FreeCAD 0.21的流程。 一、下载代码与依赖 1.1 下载代码 git clone https://github.com/FreeCAD/FreeCAD.git cd cd ./FreeCAD/ git checkout -b FreeCAD-0-21 origin/releases/FreeCAD-0-21 1.2 下载依赖 从GitHub下载FreeCAD LibPack-0.21 Ve…

21天学会C++:Day9----初识类与对象

CSDN的uu们&#xff0c;大家好。这里是C入门的第九讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 面向过程与面向对象 2. 类的定义 3. 类中的访问限定符 3.1 访问限定符的…

Linux网络编程:使用UDP和TCP协议实现网络通信

目录 一. 端口号的概念 二. 对于UDP和TCP协议的认识 三. 网络字节序 3.1 字节序的概念 3.2 网络通信中的字节序 3.3 本地地址格式和网络地址格式 四. socket编程的常用函数 4.1 sockaddr结构体 4.2 socket编程常见函数的功能和使用方法 五. UDP协议实现网络通信 5.…

SSL双向认证-Nginx配置

SSL双向认证需要CA证书&#xff0c;开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程&#xff1a;SSL双向认证-自签CA证书生成 Nginx配置适用于前端项目或前后端都通过Nginx转发的时候&#xff08;此时可不配置后端启用双向认证&#xff09; 1.Nginx配置&#…

20230908_python练习_selenium模块爬取网页小说练习

霍比特人小说爬取&#xff0c;使用 selenium 模块调用谷歌浏览器&#xff0c;无界面模式爬取小说网站信息&#xff0c;将数据按照每次2000字符在mysql中保存。 # https://www.shukuai9.com/b/324694/ # 导入需要的库 from selenium import webdriver # 导入Keys模块&#xff…

AlteraXilinx公司FPGA简介

Intel / Altera公司 Intel/Altera 系列FPGA简介 - 知乎 (zhihu.com) Altera FPGA 提供了多种可配置嵌入式 SRAM、高速收发器、高速 I/O、逻辑模块以及布线。其内置知识产权 (IP) 结合优秀的软件工具&#xff0c;缩短了 FPGA 开发时间&#xff0c;降低了功耗和成本。 Altera FP…

五、数学建模之层次分析法

1.概念 2.例题 一、概念 1.提出 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;AHP&#xff09;是一种多标准决策分析方法&#xff0c;用于帮助人们在面对复杂的决策问题时进行定量和定性的比较和评估。它最初由美国运筹学家和管理学家托马斯萨蒙&#xff08…

[字符串和内存函数]strcat字符串函数的详解和模拟

strcat函数 strcat函数是C语言中用于将一个字符串追加到另一个字符串末尾的函数。其函数原型如下&#xff1a; char *strcat(char *dest, const char *src);其中&#xff0c;dest是目标字符串&#xff0c;src是要追加的字符串。函数将src中的内容追加到dest的末尾&#xff…

软件测试的基础知识

目录 前言 软件测试的生命周期 如何描述一个bug 如何定位bug的级别 bug的生命周期 和开发人员产生争执怎么办 设计一个测试用例 前言 上篇文章主要写了软件测试的一些基本概念以及软件测试的前置知识,这篇文章主要带大家了解在进行软件测试之前要准备的工作. 软件测试…