0

0

Java 中的“复制入-复制出”参数传递模拟教程

花韻仙語

花韻仙語

发布时间:2026-01-31 22:00:03

|

166人浏览过

|

来源于php中文网

原创

Java 中的“复制入-复制出”参数传递模拟教程

本文详解如何在 java 值传递机制下模拟 copy-in / copy-out 语义,通过封装可变容器(如自定义类)实现对原始变量逻辑上的“双向更新”,并结合实例代码说明正确写法与常见误区。

在 Java 中,并不存在原生的 copy-in/copy-out(复制入/复制出)参数传递方式——该术语常见于 Fortran 或 Ada 等语言,指函数调用时将实参值复制给形参(copy-in),函数返回前再将形参最新值复制回实参(copy-out)。而 Java 始终是按值传递(pass-by-value):无论是基本类型还是引用类型,传入方法的都是变量的副本。区别在于:

  • 对 float、int 等基本类型:副本是数值本身,方法内修改不影响原始变量;
  • 对对象引用类型:副本是引用地址,方法内可通过该引用来修改对象状态(如 obj.field = ...),但无法改变原始引用所指向的对象(即不能让外部变量指向新对象,除非显式赋值)。

因此,要模拟 copy-in/copy-out 效果(即:让方法“看起来”能修改多个外部基本类型变量),核心思路是:将需被修改的变量打包进一个可变的容器对象中,传入方法;方法操作该容器的字段;调用方再从容器中读取更新后的值

回到你的 Flow 示例,目标是通过 adjustDistance() 更新 f1、f2、f3 中的某两个浮点数。题目已提供 TwoFlows 类作为容器,其 flow1 和 flow2 字段可在 adjustDistance() 中被修改。关键在于:TwoFlows 实例中的字段值不会自动同步回 f1/f2/f3 变量本身——你必须手动完成“copy-out”步骤:即调用后,用 twoFa.flow1、twoFa.flow2 替换对应原始变量。

✅ 正确做法(按题目期望输出顺序):

极品模板多语言企业网站管理系统1.2.2
极品模板多语言企业网站管理系统1.2.2

【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键

下载

立即学习Java免费学习笔记(深入)”;

// 第一次调用:调整 f2 和 f3 → 对应 TwoFlows(f2, f3)
TwoFlows twoFa = new TwoFlows(f2, f3);
twoFa.adjustDistance();
f2 = twoFa.flow1;  // copy-out:将修改后的 flow1 写回 f2
f3 = twoFa.flow2;  // copy-out:将修改后的 flow2 写回 f3
System.out.println(formatF1F2F3(f1, f2, f3)); // f1=3.00, f2=1.00, f3=6.00

// 第二次调用:调整 f1 和 f2 → 对应 TwoFlows(f1, f2)
TwoFlows twoFb = new TwoFlows(f1, f2);
twoFb.adjustDistance();
f1 = twoFb.flow1;  // copy-out
f2 = twoFb.flow2;  // copy-out
System.out.println(formatF1F2F3(f1, f2, f3)); // f1=3.67, f2=0.33, f3=6.00

// 第三次调用:调整 f3 和 f3(注意:题目示例中为 f3,f3,即同一变量传两次)
TwoFlows twoFc = new TwoFlows(f3, f3);
twoFc.adjustDistance();
f3 = twoFc.flow2;  // 题目输出显示 f3 被更新为 10.00,对应 flow2 的最终值
System.out.println(formatF1F2F3(f1, f2, f3)); // f1=3.67, f2=0.33, f3=10.00

⚠️ 注意事项:

  • TwoFlows 是一个可变容器(mutable wrapper),它使 adjustDistance() 能修改其内部状态,这是模拟 copy-out 的基础。
  • 每次调用都必须创建新实例(如 new TwoFlows(...)),否则会复用旧状态,导致逻辑错误。
  • adjustDistance() 内部逻辑依赖 Math.abs(flow1 - flow2)
  • 输出格式建议统一使用 String.format 或 DecimalFormat 控制小数位数(如 "%.2f"),以匹配预期 3.00 样式。

? 总结:Java 中没有真正的 copy-in/copy-out,但可通过“封装 + 显式赋值”完美模拟。本质是利用对象引用的可变性绕过基本类型不可变的限制,同时由程序员承担 copy-out 的责任——这正是理解 Java 参数传递机制的关键实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

503

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

580

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

103

2025.10.23

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

824

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

436

2024.06.27

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

503

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

545

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

113

2025.08.29

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.1万人学习

Java 教程
Java 教程

共578课时 | 54.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号