参数传值机制

news2024/11/23 19:28:12

在 Java 中,方法的所有参数都是 “传值” 的

  • 基本类型:数值的拷贝

  • 引用类型:引用的拷贝

    • 方法内部改变参数对象的状态(修改某属性),改变将反映到原始对象上

      因为方法内部和外部引用的是同一个对象

    • 方法内部改变参数本身的引用(引用新对象),改变不会反映到原始对象上

      因为传递的是引用的拷贝,不是引用本身

public class Test {
    public static void main(String[] args) {
        int num = 10;
        modifyNum(num);
        System.out.println("变量num的值:" + num);   // 10

        String str1 = "hello";    
        modifyStr(str1);
        System.out.println("变量str1的值:" + str1); // hello

        String str2 = new String("hello");
        modifyStr(str2);
        System.out.println("变量str2的值:" + str2); // hello

        // str1 字面量 字符串常量池
        // str2 构造方法 堆内存区域
        System.out.println(str1 == str2); // false

        Panda panda = new Panda("萌兰", 5);
        modifyPanda(panda);
        System.out.println("panda的name:" + panda.getName()); // 么么
        
        modifyReference(panda);
        System.out.println(panda); // Panda{name='么么', age=5}
        
    }

    public static void modifyNum(int num) {
        ++num;
    }

    // 字符串是常量;它们的值在创建之后不能更改
    // 无论是通过哪种方式创建的字符串对象,一旦创建后,其内容就不能被修改
    public static void modifyStr(String str) {
        str += "world";
    }

    public static void modifyPanda(Panda panda) {
        panda.setName("么么");
    }
    
    public static void modifyReference(Panda panda) {
        panda = new Panda("飞云", 10);
    }    
}

在这里插入图片描述

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

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

相关文章

探索广告行业业务模型的创新与发展

标随着数字化时代的到来,广告行业正经历着前所未有的变革和发展。在这个充满挑战和机遇的时代,广告公司和从业者们正在探索各种创新的业务模型,以适应市场的变化并取得成功。本文将深入探讨广告行业的业务模型,探索创新与发展的路…

华为交换机配置指引(包含安全配置部分)以 S5735S-L48T4S-A1 配置为例

华为S5735S-L48T4S-A1 是一款千兆以太网交换机: 端口结构: 48个10/100/1000BASE-T以太网端口和4个千兆SFP光接口供电方式: 交流电源背板带宽: 432Gbps包转发率: 87/166Mpps机箱高度: 1U重量: 2.76kg(不含包材)功耗: 典型功耗为43.3W接口: 48个10/100/1000BASE-T以太网电接口…

Python-VBA编程500例-029(入门级)

连续字符段索引(Index of Consecutive Character Segments)在实际应用中具有多种场景。常见的应用场景有: 1、文本分析:在文本处理和分析中,连续字符段索引可以用于识别重复的字符序列或模式。这些模式可能对于理解文本的结构、风格或特定含…

详解人工智能(概念、发展、机遇与挑战)

前言 人工智能(Artificial Intelligence,简称AI)是一门新兴的技术科学,是指通过模拟、延伸和扩展人类智能的理论、方法、技术和应用系统,以实现对人类认知、决策、规划、学习、交流、创造等智能行为的模拟、延伸和扩展…

Golang并发模型-Pipeline模型、Fan-in Fan-out模型

这段时间由于项目的需要,本人正在研究关于如何优雅的进行go的并发,以下是结合资料和视频的结果,文末会给出参考资料 Go语言的并发模型主要通过goroutine和channel实现,通过这个我们可以更有效地使用IO和CPU 这里我们围绕生成一个…

vtk实现多条曲线多条航迹轨迹用不同颜色区分不同曲线

vtk实现多条曲线多条航迹轨迹用不同颜色区分不同曲线 说明(废话)实现 说明(废话) 通过vtk9.2绘制多条三维曲线,让每条曲线不同颜色。 实现 以上只是测试效果 定义了一个Qvector m_colors,并在构造函数中赋值。 在箭头处调用,也就是上图最…

使用docker部署MongoDB数据库

最近由于工作需要搭建MongoDB数据库:将解析的车端采集的数据写入到数据库,由于MongoDB高可用、海量扩展、灵活数据的模型,因此选用MongoDB数据库;由于现公司只有服务器,因此考虑容器化部署MongoDB数据,特此…

clickhouse sql使用2

1、多条件选择 multiIf(cond_1, then_1, cond_2, then_2, …, else) select multiIf(true,0,1) 当第一条件不成立看第二条件判断 第一个参数条件参数,第二参数条件成立时走 2、clickhouse 在计算时候长出现NaN和Infinity异常处理 isNaN()和isInfinite()处理

数据结构栈和堆列

目录 栈: 栈的概念: 栈的实现: 栈接口的实现: 1.初始化栈: 2.入栈: 3.出栈: 4. 获取栈顶元素: 5.获取栈中有效数据的个数: 6.检测栈是否为空,如果为…

rocketmq管理工具rocketmq-console安装

rocketmq-console是一个图形化管理控制台,提供Broker集群状态查看,Topic管理,Producer、Consumer状态展示,消息查询等常用功能,这个功能在安装好RocketMQ后需要额外单独安装、运行。 中文文档地址:https:/…

基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1无刷直流电机模型与速度控制 4.2 模糊PID控制器设计 5.完整工程文件 1.课题概述 基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真。基于模糊PID控制器的无刷直流电机(Brus…

量化交易入门(四十)什么是ASI指标,怎么用它炒股

一、什么是ASI指标 ASI指标全称为Accumulation Swing Index,即积累摆动指数。它是一种用于衡量市场供需关系强度的技术指标,由Welles Wilder开发。ASI指标结合了价格和成交量的变化,试图从动量的角度来衡量多空双方的力量对比。其计算公式如下: 计算价格的变化值:ΔP 今日收盘…

【Python系列】数据遍历

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

dddddd

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

使用Java流API构建树形结构数据

简介: 在实际开发中,构建树状层次结构是常见需求,如组织架构、目录结构或菜单系统。本教案通过解析给定的Java代码,展示如何使用Java 8 Stream API将扁平化的菜单数据转换为具有层级关系的树形结构。 1. 核心类定义 - Menu Data…

时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

JAVAEE—Callable接口,ReentrantLock,synchronized的工作过程

文章目录 Callable接口的用法Callable与FutureTask类 加锁的工作过程什么是偏向锁呢?举个例子 轻量级锁重量级锁 ReentrantLockReentrantLock 的用法: Callable接口的用法 Callable 是一个 interface . 相当于把线程封装了一个 “返回值”. 方便程序猿借助多线程的…

YoloV8改进策略:Neck改进|GCNet(独家原创)|附结构图

摘要 本文使用GCNet注意力改进YoloV8,在YoloV8的Neck中加入GCNet实现涨点。改进方法简单易用,欢迎大家使用! 论文:《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》 非局部网络(NLNet)通过为每个查…

【教程】Kotlin语言学习笔记(六)——泛型

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 第五章 《L…

如何远程电脑连接?

远程电脑连接是指通过网络将计算机与远程设备连接起来,实现远程管理和操作的技术。在现代信息化社会中,远程电脑连接成为了人们工作和生活中的重要方面。远程电脑连接可以极大地提高工作效率和便利性,让我们能够在不同地点的计算机之间进行协…