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开发的知识,敬请期待!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【文件增量备份系统】前端项目构建

文章目录 创建项目安装项目依赖引入element plus组件下载组件在main.js中使用组件测试 整合路由router下载组件创建路由管理器index.js使用路由App.vue上面使用 <router-view />测试 整合axios下载组件工具类axiosRequest.js工具类使用 创建项目 damwangrunqindeMBP dev…

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组&#xff08;n 是 10 的倍数&#xff09;&#xff0c;每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均&#xff0c;而更改第i 个数的代价为bi&#xff0c; 他想更改若干个数的值使得这10 种数出现的次数相等&…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架

论文标题&#xff1a;A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载&#xff0c;如作业到达率和用户请求率&#xff0c;对于云计算中的资源管理和弹性非常关键。然而&#xff0c;设计一个通用的工作负载预测器…

软考 系统分析师系列知识点之信息系统战略规划方法(1)

所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 信息系统战略规划&#xff08;Information System Strategic Planning&#xff0c;ISSP&#xff09;是从企业战略出发&#xff0c;构建企业基本的信息架构&#xff0c;对企业内、外信息资源进行…

AI专题:海外科技巨头指引,AI主线逻辑依旧坚挺

今天分享的是AI 系列深度研究报告&#xff1a;《AI专题&#xff1a;海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺》。 &#xff08;报告出品方&#xff1a;华西证券&#xff09; 报告共计&#xff1a;54页 本周热点:海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺 硬件…

【教3妹学编程-算法题】1696. 跳跃游戏 VI

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 没想到都立春了还这么冷啊~ 3妹&#xff1a;暴雪、冻雨、大雨&#xff0c;这天气还让不让人活啦&#xff01;&#xff01;&#xff01; 2哥 :哎&#xff0c;好多人都滞留的高铁站了&#xff0c;没法回家了 3妹&#xf…

Jetson AGX Orin安装Anaconda,Cuda,Cudnn,pytorch,Tensorrt,ROS

Anaconda&#xff1a;https://repo.anaconda.com/archive/ Cuda&#xff1a;https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 1&#xff1a;安装Anaconda3 下载&#xff1a;Anaconda3-2021.11-Linux-aarch64.sh chmod x Anaconda3-2021.11-Linux-aarch64.s…

部署自己的捕鱼达人

目录 效果 安装 1.安装httpd 2.下载捕鱼达人 3.启动httpd 效果 安装 1.安装httpd yum -y install httpd systemctl enable httpd 2.下载捕鱼达人 cd /var/www/html/ git clone https://gitee.com/WangZhe168_admin/Fishing-talentGame.git 3.启动httpd systemctl st…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式 基础(持续更新~)

具体操作&#xff1a; day2: 作用&#xff1a; 出现跨域问题 配相对应进行配置即可解决&#xff1a; IDEA连接的&#xff0c;在url最后加参数?useSSLfalse注意链接密码是123&#xff08;docker中mysql密码&#xff09; 注意&#xff0c;虚拟机中设置的密码和ip要和主机上…

基于Java (spring-boot)的交通管理系统

一、项目介绍 基于Java (spring-boot)的交通管理系统功能&#xff1a;注册登录、个人信息管理、驾驶证业务类型管理、机动车业务类型管理、新闻类型管理、违法处理业务类型管理、驾驶证业务管理、机动车业务管理、新闻管理、违法处理业务管理、用户管理。 二、作品包含 三、项目…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

【优先级队列(大顶堆 小顶堆)】【遍历哈希表键值对】Leetcode 347 前K个高频元素

【优先级队列&#xff08;大顶堆 小顶堆&#xff09;】【排序】Leetcode 347 前K个高频元素 1.不同排序法归纳2.大顶堆和小顶堆3.PriorityQueue操作4.PriorityQueue的升序&#xff08;默认&#xff09;与降序5.问题解决&#xff1a;找前K个最大的元素 &#xff1a;踢走最小的&…

【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术

目录 一、思维导图 二、 物理层概述 1.物理层概述 2.四大特性&#xff08;巧记"械气功程") 三、通信基础 1.数据通信基础 2.趁热打铁☞习题训练 3.信号の变身&#xff1a;编码与调制 4.极限数据传输率 5.趁热打铁☞习题训练 6.信道复用技术 推荐 前些天发…

Qt:QFileDialog

目录 一、介绍 二、功能 三、具体事例 1、将某个界面保存为图片&#xff0c;后缀名可选PNG、JPEG、SVG等 一、介绍 QFileDialog提供了一个对话框&#xff0c;允许用户选择文件或者目录&#xff0c;也允许用户遍历文件系统&#xff0c;用以选择一个或多个文件或者目录。 QF…

Python代码混淆工具,Python源代码保密、加密、混

引言 Python作为一种高级脚本语言&#xff0c;便捷的语法和丰富的库使它成为众多开发者的首选。然而&#xff0c;有时候我们希望保护我们的Python源代码&#xff0c;避免被他人轻易获取和篡改。为了实现这一目标&#xff0c;我们可以采取代码混淆的技术手段。本文将介绍Python…

【C语言】大小写字母的相互转化:多种方法解析及原理说明

在 C 语言编程中&#xff0c;我们经常需要进行大小写字母的相互转化。这种转化可以用于实现字符串的大小写转换、字符的大小写比较等操作。本篇博客将介绍多种方法来实现大小写字母的相互转化&#xff0c;并说明其原理和使用场景。 目录 方法一&#xff1a;标准库函数 方法二…

vue3 element el-table表头冻结,表头吸顶directives方法

vue3 element el-table表头冻结&#xff0c;表头吸顶directives方法 1、在文件夹中创建directives文件 /*** 思路:通过简体 el-table的 thead和tbody父级别区域&#xff0c;进行设置对于的fixed*/function getElParentBySelector(el, queryClassSelector) {if (!el) {return e…

NuxtJs安装Sass后出现ERROR:Cannot find module ‘webpack/lib/RuleSet‘

最近了解NuxtJs时&#xff0c;发现问题比较多&#xff0c;对于初学者来说是件比较头痛的事。这次是安装sass预处理器&#xff0c;通过命令安装后&#xff0c;出现了ERROR&#xff1a;Cannot find module webpack/lib/RuleSet 错误&#xff0c;于是根据之前经验&#xff0c;对版…

Linux--- vim详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 “学如逆水行舟&#xff0…

支持多字体、静动态的.NET图片验证码的开源项目

上次分享过 SkiaSharp 这个开源图形项目&#xff0c;并举了一个生成验证码的例子&#xff0c;具体见文章&#xff1a;《SkiaSharp&#xff1a;.NET强大而灵活的跨平台图形库》。 但文中验证码比较简单&#xff0c;刚好看到一个非常不错的图片验证码&#xff0c;分享给大家。 …