Java的值传递与“引用传递”辨析

目录

  • Java的值传递与“引用传递”辨析
    • 1. 传递方式概述
    • 2. 值传递示例
    • 3. “引用传递”示例
    • 4. 值传递与"引用传递"的实际应用
    • 5. 总结:java只有值传递

Java的值传递与“引用传递”辨析

欢迎来到本博客,今天我们将深入研究Java中是值传递还是引用传递,这是一个经常让人困惑的话题。

1. 传递方式概述

在Java中,当你将一个变量传递给一个方法时,你实际上是在传递这个变量的值。然而,对于引用类型,这个值是对象引用的副本,而不是对象本身。

2. 值传递示例

考虑以下的值传递例子:

public class ValueExample {public static void main(String[] args) {int x = 5;modifyValue(x);System.out.println("After modifyValue: " + x);}public static void modifyValue(int value) {value = 10;}
}

在这个例子中,modifyValue 方法接收一个整数参数,并将其值修改为10。然而,当方法执行完成后,x 的值仍然是5。这是因为基本数据类型(如int)是按值传递的,传递的是变量的副本,而不是变量本身。

3. “引用传递”示例

现在,我们来看一个例子:

public class ReferenceExample {public static void main(String[] args) {StringBuilder str = new StringBuilder("Hello");modifyReference(str);System.out.println("After modifyReference: " + str);}public static void modifyReference(StringBuilder reference) {reference.append(" World");}
}

在这个例子中,modifyReference 方法接收一个StringBuilder引用,并在原始对象上进行修改。当方法执行完成后,str 的值变为Hello World。这是因为引用类型是按值传递的,传递的是引用的副本,但仍然指向同一个对象。

4. 值传递与"引用传递"的实际应用

在实际开发中,理解值传递和引用传递的概念有助于更好地处理数据和避免一些常见的误解。

public class App {public static void main(String[] args) {int a = 5;modifyValue(a);System.out.println("After modifyValue: " + a);StringBuilder str = new StringBuilder("Hello");modifyReference(str);System.out.println("After modifyReference: " + str);}private static void modifyValue(int value) {value = 10;}private static void modifyReference(StringBuilder reference) {reference.append(" World");}
}

在这里插入图片描述
看样子java是支持引用传递,但是其实java是值传递,我们如果下面这样处理;

public static void main(String[] args) {StringBuilder str = new StringBuilder("Hello");modifyReference(str);System.out.println("After modifyReference2: " + str);}// 引用传递private static void modifyReference(StringBuilder reference) {StringBuilder stringBuilder = new StringBuilder(reference);stringBuilder.append(" World");System.out.println("After modifyReference1: " + stringBuilder);}

在这里插入图片描述
看到内层打印hello world,而外层还是hello,所以之前的只是改变了引用类型的副本,真实还是值传递。

通过这个例子,我们清晰地展示了值传递在Java中的应用,希望这有助于你更好地理解Java中的参数传递机制。

5. 总结:java只有值传递

总结:对于形参的修改不会影响到实参就是值传递,对于形参的修改能够影响到实参就是引用传递
通过本博客,我们详细了解了Java中只有值传递,没有引用传递。希望这篇博客对您有所帮助。

感谢您的阅读,下一篇博客将继续分享有关Java开发的知识,敬请期待!

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

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

相关文章

本地运行多种大语言模型:一行代码即可完成 | 开源日报 No.167

ollama/ollama Stars: 33.5k License: MIT ollama 是一个轻量级、可扩展的本地语言模型构建和运行框架。 提供简单的 API 用于创建、运行和管理模型包含丰富的预构建模型库,方便在各种应用中使用支持从 GGUF、PyTorch 或 Safetensors 导入自定义模型可以通过命令行…

【维生素C语言】附录:strlen 函数详解

写在前面:本篇将专门为 strlen 函数进行讲解,总结了模拟实现 strlen 函数的三种方法,并对其进行详细的解析。手写库函数是较为常见的面试题,希望通过本篇博客能够加深大家对 strlen 的理解。 0x00 strlen函数介绍 【百度百科】str…

科普:工业物联网的八个模块,一看就明白了。

工业物联网(Industrial Internet of Things,IIoT)是将传感器、设备、网络和云计算等技术应用于工业领域的物联网应用。它由多个模块构成,这些模块协同工作,实现对工业设备和系统的监测、控制和优化。以下是工业物联网常…

【前后端的那些事】2万字详解WebRTC + 入门demo代码解析

文章目录 构建WebRTC需要的协议1. ICE2. STUN3. NAT4. TURN5.SDP WebRTC通讯过程1. 大致流程2. 详细流程3. 核心api3.1 RTCPeerConnection3.2 媒体协商3.3 重要事件 代码编写1. 什么是websocket2. 消息实体类Message3. 业务流程图4. 搭建前后端环境5. join -- handleJoin -- jo…

LLM少样本示例的上下文学习在Text-to-SQL任务中的探索

导语 本文探索了如何通过各种提示设计策略,来增强大型语言模型(LLMs)在Few-shot In-context Learning中的文本到SQL转换能力。通过使用示例SQL查询的句法结构来检索演示示例,并选择同时追求多样性和相似性的示例可以提高性能&…

Mysql-数据库压力测试

安装软件 官方软件 安装插件提供了更多的监听器选项 数据库驱动 数据库测试 配置 这里以一个简单的案例进行,进行连接池为10,20,30的梯度压测: select * from tb_order_item where id 1410932957404114945;新建一个线程组 新增一个连接池配置 新建一…

深入理解Go的垃圾回收机制

导语 如果你是一位Golang的开发者,你一定对于语言特性和详细结构有所了解。但是,你是否曾经停下来深入研究过Golang背后复杂而强大的垃圾回收(GC)机制?在这篇文章中,我们将具体深入探讨Golang垃圾回收机制…

Linux操作系统基础(七):Linux常见命令(二)

文章目录 Linux常见命令(二) 一、kill命令 二、ifconfig命令 三、clear命令 四、重启与关机命令 五、which命令 六、hostname命令 七、grep命令 八、|管道 九、useradd命令 十、userdel命令 十一、tar命令 十二、su命令 十三、ps命令 Linu…

中科大计网学习记录笔记(九):DNS

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

华为云ModelBox实战:体感小游戏应用实操

目录 一、VsCode插件注册ModelBox设备二、Windows SDK安装1.安装Git for Windows2.下载ModelBox SDK3.相关插件安装 三、体感小游戏应用开发1.技能模板使用2.AI应用示例3.体感小游戏体验 参与华为云活动【HCSD】ModelBox实战营邀请活动,呼朋唤友学AIoT,完…

视频直播系统架构的设计与实现

视频直播系统作为一种实时性强、用户互动性高的应用,其架构设计至关重要。本文将介绍如何设计和实现一个稳定、高性能的直播系统架构,以提供良好的用户体验和可靠的服务。 1. 系统架构概述 - 介绍视频直播系统的整体架构,包括客户端、服务…

Linux操作系统基础(九):Linux用户与权限

文章目录 Linux用户与权限 一、文件权限概述 二、终端命令:组管理 三、终端命令:用户管理 1、创建用户 、 设置密码 、删除用户 2、查看用户信息 3、su切换用户 4、sudo 4.1、给指定用户授予权限 4.2、使用 用户 zhangsan登录, 操作管理员命令…