Java 中用的是值传递还是引用传递?

值传递(Pass by Value)和引用传递(Pass by Reference)是两种参数传递的方式。

值传递是指在调用函数或方法时,将参数的值复制给一个临时变量然后传递给函数或方法。在函数或方法内部,对参数进行修改不会影响到原始变量。

引用传递是指在调用函数或方法时,将参数的引用(内存地址)传递给函数或方法。在函数或方法内部,对参数进行修改会改变原始变量。

在 Java 中,参数传递采用的是值传递。具体来说:

  • 对于基本数据类型(如int、float等),值本身会被复制,传递的是该值的副本。修改函数或方法内的参数不会影响原始变量。

  • 对于引用类型(如数组、类的实例等),传递的是对象的引用的副本。原始变量和函数或方法内的参数指向同一个对象,对参数的修改会影响原始对象,但如果参数重新分配了一个新的对象,不会影响原始对象。

需要注意的是,虽然 Java 中的参数传递是值传递,但在传递引用类型时,由于传递的是引用的副本,可能产生误解,让人以为是引用传递。但从底层实现来看,仍然是值传递的机制。

  1. 值传递的示例:
public class Example {public static void main(String[] args) {int x = 10;changeValue(x);System.out.println("x: " + x); // 输出: x: 10}public static void changeValue(int value) {value = 20;}
}

在上面的示例中,我们将变量x的值传递给changeValue()方法。在方法内部,参数value接收到x的值的副本,然后将其修改为20。但这个修改不会影响到原始的变量x,因此打印出的值仍然是10。

  1. 引用传递的示例:
public class Example {public static void main(String[] args) {int[] arr = {1, 2, 3};changeArray(arr);System.out.println("arr[0]: " + arr[0]); // 输出: arr[0]: 100}public static void changeArray(int[] array) {array[0] = 100;}
}

在这个示例中,我们将一个包含了3个元素的整数数组传递给changeArray()方法。在方法内部,参数array接收到了该数组的引用的副本。通过修改array数组的第一个元素,也就是原始数组的第一个元素,将其改为100。由于在方法之外仍然引用着相同的数组,所以在打印时会显示修改后的值。

虽然第二个示例中看起来像是传递了一个引用,但从底层来讲,实际上是传递了一个引用的副本,因此仍然可以归类为值传递。

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

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

相关文章

HZOJ-271: 滑动窗口

题目描述 ​ 给出一个长度为 N� 的数组,一个长为 K� 的滑动窗口从最左移动到最右,每次窗口移动,如下图: 找出窗口在各个位置时的极大值和极小值。 输入 ​ 第一行两个数 N,K�,�。 …

linux部署gitlab

1. 配置yum源: vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck0 enabled1 2. 更新本地缓存 sudo yum install -y gitlab-ce 3. 安装相关依赖 yum …

白水三佳电脑ERP部署

安装宝塔面板,有这个方便很多,可以省下3天的环境部署时间。 移动端, 先取移动版的压缩包,上传至服务器/www/wwwroot/目录下面,直接解压到当前目录后会生成/www/wwwroot/m/的目录,移动版就在这里面了。以下…

Python3----------抽象(多态、封装、继承等)

术语多态(polymorphism)源自希腊语,意思是“有多种形态”。这大致意味着即便你不知道变量指向的是哪种对象,也能够对其执行操作,且操作的行为将随对象所属的类型(类)而异。 封装(en…

基于深度优先搜索的图遍历

这里写目录标题 基于深度优先搜索的无向图遍历算法流程图Python实现Java实现 基于深度优先搜索的有向图遍历Python实现 基于深度优先搜索的无向图遍历 使用深度优先搜索遍历无向图,将无向图用邻接表存储: 算法流程图 初始化起点 source,当…

RAID2.0优势

一、定义 RAID2.0技术将硬盘域中的硬盘空间切分成固定大小的物理空间-CK(Chunk64M),实现底层虚拟化,不同硬盘的多个CK组成存储池,相同类型的CK按照RAID策略组成(CKG),CKG将再次切分成…

机器人控制算法——TEB算法—Obstacle Avoidance and Robot Footprint Model(避障与机器人足迹模型)

1.How Obstacle Avoidance works 1.1处罚条款 避障是作为整体轨迹优化的一部分来实现的。显然,优化涉及到找到指定成本函数(目标函数)的最小成本解(轨迹)。简单地说:如果一个计划的(未来&…

Jmeter测试关联接口

Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,本文主要介绍jmeter通过正则表达式提取器来实现接口关联的方式,可供参考。 一、实例场景: 有如下两个接口,通过正则表达式提取器,将第一…

【ROS 2 基础-常用工具】-6 Rviz基础使用

所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客

chromium 52 chrome 各个版本发布功能列表(58-84)

chromium Features 58-84 From https://chromestatus.com/features chromium58 Features:41 ‘allow-top-navigation-by-user-activation’ <iframe sandbox> keyword Adds a new keyword named “allow-top-navigation-by-user-activation” for iframe sandbox, wh…

整理uvc驱动相关函数的调用流程

目录 1、uvc_video.c初始化函数的调用关系 2、uvc_queue.c3、uvc_v4l2.c4、v4l2-core5、数据传输1、分配一个gadget请求2、请求一个queue 1、uvc_video.c // uvc_video.c uvc_video_encode_header uvc_video_encode_data uvc_video_encode_bulk uvc_video_encode_isoc uvcg_vi…

【算法|前缀和系列No.4】leetcode238. 除自身以外数组的乘积

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【leetcode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Linux UWB Stack实现——MCPS帧处理

MCPS帧处理 用于处理IEEE 802.15.4中的相关帧&#xff0c;Frame Processing&#xff0c;简写为&#xff1a;fproc。 在实现中&#xff0c;维护了关于帧处理的有限状态机(FSM)。本文从帧处理的数据结构和部分典型处理实现上进行简要的介绍。 1. 数据结构定义 关于帧处理状态…

如何使用 MiniGPT-v2

MiniGPT-v2 是一个基于视觉语言模型&#xff08;LLM&#xff09;的多任务学习系统。它可以用于各种视觉语言任务&#xff0c;包括图像描述、图像识别、图像-文本对话等。 本文将介绍如何使用 MiniGPT-v2。 MiniGPT-v2 提供了一个简单的在线演示&#xff0c;可以用于测试模型。…

如何取消a链接点击时的背景颜色

引言 在网页设计中&#xff0c;链接是非常重要的元素之一。当用户点击链接时&#xff0c;通常会出现一个背景颜色或者下划线来表示链接的状态。然而&#xff0c;有时候我们可能希望取消链接点击时出现的背景颜色&#xff0c;以便更好地控制链接的外观。本文将介绍如何取消a链接…

2023.10.18

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slot…

手机怎么监控电脑?

随着企业对电脑监控需求的增加&#xff0c;越来越多的管理者意识到使用电脑监控电脑的不便性&#xff0c;一旦外出就无法实时查看监控。其实可以用手机实现监控电脑的需求&#xff0c;只需在被监控端安装电脑监控软件后&#xff0c;将电脑设备和员工信息进行绑定&#xff0c;使…

npm 执行命令时报错npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve

npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue-office/docx1.3.0 npm ERR! Found: vue-demi0.14.6 npm ERR! node_modules/vue-demi npm ERR! vue-demi“^0.14.6” from the root project npm ERR! vue-demi“*” from …

linux系统编程之一

1&#xff09;fcntl的使用方法 fcntl作用:可以用fcntl函数改变一个已打开的文件属性而不必重新打开文件&#xff1b; 堆排序是完全二叉树&#xff0c;但不是排序二叉树&#xff1b; 排序二叉树要求兄弟节点之间有大小关系&#xff0c;比如说左小右大&#xff1b; 堆排序仅要求…

神经网络硬件加速器-DPU分析

一 DPU概述 DPU是专为卷积神经网络优化的可编程引擎&#xff0c;其使用专用指令集&#xff0c;支持诸多卷积神经网络的有效实现。 1、关键模块 卷积引擎&#xff1a;常规CONV等ALU&#xff1a;DepthwiseConvScheduler&#xff1a;指令调度分发Buffer Group&#xff1a;片上数据…