【java】方法的值传递

在 Java 中,方法的值传递 是指将实参的值传递给方法的形参。Java 中只有 值传递,没有引用传递。具体来说:

  • 对于 基本数据类型,传递的是值的副本。

  • 对于 引用数据类型,传递的是引用的副本(即地址的副本)。


1. 基本数据类型的值传递

对于基本数据类型(如 intdoublechar 等),方法传递的是值的副本。修改形参不会影响实参。

例子

java

Copy

public class Main {public static void main(String[] args) {int a = 10;System.out.println("调用方法前: a = " + a); // 输出 10changeValue(a); // 传递 a 的值(10)的副本System.out.println("调用方法后: a = " + a); // 输出 10(a 的值未改变)}public static void changeValue(int b) {b = 20; // 修改形参 b 的值System.out.println("方法内: b = " + b); // 输出 20}
}
  • 输出结果

    Copy

    调用方法前: a = 10
    方法内: b = 20
    调用方法后: a = 10
  • 解释

    • a 的值是 10,调用 changeValue(a) 时,传递的是 a 的值的副本(即 10)。

    • 在方法内部修改 b 的值不会影响 a 的值。


2. 引用数据类型的值传递

对于引用数据类型(如数组、对象等),方法传递的是引用的副本(即地址的副本)。修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。

例子

java

Copy

public class Main {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.println("调用方法前: arr[0] = " + arr[0]); // 输出 1changeArray(arr); // 传递 arr 的引用的副本System.out.println("调用方法后: arr[0] = " + arr[0]); // 输出 100}public static void changeArray(int[] brr) {brr[0] = 100; // 修改形参指向的数组内容System.out.println("方法内: brr[0] = " + brr[0]); // 输出 100}
}
  • 输出结果

    Copy

    调用方法前: arr[0] = 1
    方法内: brr[0] = 100
    调用方法后: arr[0] = 100
  • 解释

    • arr 是一个数组引用,调用 changeArray(arr) 时,传递的是 arr 的引用的副本(即地址的副本)。

    • brr 和 arr 指向同一个数组对象,因此修改 brr[0] 会影响 arr[0]


3. 值传递的通俗比喻

  • 基本数据类型

    • 就像你复印了一份文件(值的副本),修改复印件不会影响原件。

    • 例如:int a = 10; 传递的是 10 的副本。

  • 引用数据类型

    • 就像你复印了一张银行卡(引用的副本),银行卡指向同一个银行账户。

    • 例如:int[] arr = {1, 2, 3}; 传递的是数组引用的副本,但数组内容共享。


4. 总结

  • Java 中只有值传递

    • 对于基本数据类型,传递的是值的副本。

    • 对于引用数据类型,传递的是引用的副本。

  • 基本数据类型:修改形参不会影响实参。

  • 引用数据类型:修改形参的引用不会影响实参的引用,但修改形参指向的对象内容会影响实参指向的对象内容。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?

OpenAI o1模型在回答问题前会进行深入思考,并生成一条内部推理链,使其在尝试解决问题时可以识别并纠正错误,将复杂的步骤分解为更简单的部分,并在当前方法无效时尝试不同的途径。据悉,o1不仅数学水平与美国奥林匹克竞赛…

基于ArduPilot开发无人机飞控自动驾驶仪

目录 1、项目参数 2、硬件设计解析 2.1、主控与协处理器架构 2.2、高精度传感器集成 2.3、数据存储与恢复 2.4、电源管理与保护 2.5、通信与接口 本项目基于开源飞行控制固件 ArduPilot 开发,设计并实现了一款高度集成的 自动驾驶仪,可广泛应用于…

传输层协议TCP ( 下 )

文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP(Transmission Control Protocol,传输控制协议)是互联网最重要…

vscode使用常见问题处理合集

目录 一、使用vite创建的vue3项目,script和style首行代码不会缩进,且格式化属性字段等会换行问题 首行缩进情况如下: 属性、参数格式化换行情况如下: 解决方式: 一、使用vite创建的vue3项目,script和style首行代码不…

【C语言】程序环境与预处理

目录 程序的翻译环境和执行环境 粗谈编译链接 翻译环境 编译的几个阶段及链接 运行环境 预处理详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## 带副作用的宏参数 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 …

类与对象C++详解(中)-----构造函数与析构函数

1.构造函数 构造函数是一个特殊的成员函数,函数名和类名相同,构造函数的作用是初始化,以下是构造函数的一些特点: 1. 函数名与类名相同。 2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结&#…

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先,为什么要有 TCP/IP 网络模型&a…

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…

硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍

目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下,在每个步进…

机器学习·最近邻方法(k-NN)

前言 上一篇简单介绍了决策树,而本篇讲解与决策树相近的 最近邻方法k-NN。 机器学习决策树-CSDN博客 一、算法原理对比 特性决策树最近邻方法(k-NN)核心思想通过特征分割构建树结构,递归划分数据基于距离度量,用最近…

Deesek:新一代数据处理与分析框架实战指南

Deesek:新一代数据处理与分析框架实战指南 引言 在大数据时代,高效处理和分析海量数据是企业和开发者面临的核心挑战。传统工具如Pandas、Spark等虽功能强大,但在实时性、易用性或性能上仍有提升空间。Deesek(假设名称&#xff…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…

JVM内存模型详解

文章目录 1. 程序计数器(Program Counter Register)2. Java虚拟机栈(Java Virtual Machine Stacks)3. 本地方法栈(Native Method Stacks)4. Java堆(Java Heap)5. 方法区(…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发:运维有术,作者术哥。 今天,我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理,官方推荐使用 Harbor 作为镜像仓库管理工具,它为企业级用户提供…

代码随想录-训练营-day30

今天我们要进入动态规划的背包问题,背包问题也是一类经典问题了。总的来说可以分为: 今天让我们先来复习0-1背包的题目,这也是所有背包问题的基础。所谓的0-1背包问题一般来说就是给一个背包带有最大容量,然后给一个物体对应的需要…

百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中

百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…

【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

侯捷 C++ 课程学习笔记:C++ 面向对象开发的艺术

在侯捷老师的 C 系列课程中,《C 面向对象开发》这门课程让我对面向对象编程有了更深入的理解。面向对象编程(OOP)是现代软件开发中最重要的编程范式之一,而 C 作为支持 OOP 的语言,提供了强大的工具和特性。侯捷老师通…

神经网络常见激活函数 12-Swish函数

Swish 函数导函数 Swish函数 S w i s h ( x ) x ⋅ σ ( β x ) x 1 e − β x \begin{aligned} \rm Swish(x) & x \cdot \sigma(\beta x) \\ & \frac{x}{1 e^{-\beta x}} \end{aligned} Swish(x)​x⋅σ(βx)1e−βxx​​ Swish函数导数 d d x S w i s h ( x…

CF 137B.Permutation(Java 实现)

题目分析 输入n个样本,将样本调整为从1到n的包含,需要多少此更改 思路分析 由于样本量本身就是n,无论怎么给数据要么是重复要么不在1到n的范围,只需要遍历1到n判断数据组中有没有i值即可。 代码 import java.util.*;public clas…