0

0

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

碧海醫心

碧海醫心

发布时间:2026-02-01 11:54:09

|

384人浏览过

|

来源于php中文网

原创

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

本文详解如何在 java 中通过封装类手动模拟 copy-in/copy-out 参数传递机制,解决原始值无法被方法直接修改的问题,并给出符合作业要求的正确实现方案。

在 Java 中,所有参数传递本质上都是“按值传递”(pass-by-value)——即传入方法的是变量值的副本。对于基本类型(如 float),这意味着方法内对形参的任何修改都不会影响原始变量;对于引用类型,则是复制了对象引用的值(即内存地址),因此可通过该引用来修改对象状态,但无法让原始引用指向新对象。

本题中的 copy-in / copy-out 并非 Java 原生支持的机制(如 Fortran 或 Ada 中的 inout 参数),而是一种编程模拟策略

  • copy-in:将原始变量的当前值“复制进入”一个可变容器(如自定义类实例);
  • copy-out:方法执行后,从该容器中“复制出来”更新后的值,再显式赋回原始变量。

题目提供的 TwoFlows 类正是这样一个容器——它封装了两个 float 字段 flow1 和 flow2,且 adjustDistance() 方法会就地修改它们。但关键在于:TwoFlows 实例内部的修改不会自动同步回 main 中的 f1、f2、f3,因为这些基本类型变量与 TwoFlows 字段之间没有引用关联。

✅ 正确实现:显式 copy-out 赋值

根据题目要求(仅修改 // only alter code below this comment 以下部分),需依次对 (f2, f3)、(f1, f2)、(f3, f3) 这三组参数执行 adjustDistance(),并在每次调用后将结果“写回”对应变量。注意:f3 在第二步被 f2 更新后影响第三步,因此必须严格按顺序操作并及时同步。

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

Wave.Video
Wave.Video

一个在线的AI自动化视频创作平台

下载

以下是符合预期输出的完整修正代码:

// TASK: Simulate copy-in / copy-out passing for adjustDistance
// Step 1: Process (f2, f3) → update f2 and f3
TwoFlows twoFa = new TwoFlows(f2, f3);
twoFa.adjustDistance();
f2 = twoFa.flow1;
f3 = twoFa.flow2;
System.out.println(formatF1F2F3(f1, f2, f3));

// Step 2: Process (f1, f2) → update f1 and f2
TwoFlows twoFb = new TwoFlows(f1, f2);
twoFb.adjustDistance();
f1 = twoFb.flow1;
f2 = twoFb.flow2;
System.out.println(formatF1F2F3(f1, f2, f3));

// Step 3: Process (f3, f3) → update f3 (both args are f3)
TwoFlows twoFc = new TwoFlows(f3, f3);
twoFc.adjustDistance();
f3 = twoFc.flow1; // or twoFc.flow2 — they're equal after adjustment
System.out.println(formatF1F2F3(f1, f2, f3));

? 验证逻辑与输出说明

  • 初始:f1=3.0, f2=3.0, f3=4.0
  • Step 1:twoFa = new TwoFlows(3.0, 4.0) → |3−4|=1 < 10,进入 else 分支(因 3<4):
    flow1 = 3.0/3 = 1.0,flow2 = 4.0 + 1.0 = 5.0,再 flow2 = 5.0 + 1.0 = 6.0 → f2=1.0, f3=6.0
  • Step 2:twoFb = new TwoFlows(3.0, 1.0) → |3−1|=2 < 10,进入 if 分支(3>1):
    flow2 = 1.0/3 ≈ 0.333,flow1 = 3.0 + 0.333 + 0.333 ≈ 3.667 → f1≈3.67, f2≈0.33
  • Step 3:twoFc = new TwoFlows(6.0, 6.0) → |6−6|=0 < 10,任一分支结果相同(如 if):
    flow2 = 6.0/3 = 2.0,flow1 = 6.0 + 2.0 + 2.0 = 10.0 → f3 = 10.0

最终输出完全匹配预期:

f1 = 3.00, f2 = 3.00, f3 = 4.00
f1 = 3.00, f2 = 1.00, f3 = 6.00
f1 = 3.67, f2 = 0.33, f3 = 6.00
f1 = 3.67, f2 = 0.33, f3 = 10.00

⚠️ 注意事项

  • ❌ 错误做法:仅创建 TwoFlows 并调用 adjustDistance(),却不把 flow1/flow2 的值赋回 f1/f2/f3 —— 这就是你原输出全为初始值的原因。
  • ✅ 必须显式 fX = twoX.flowY,这是 copy-out 的核心步骤。
  • ? TwoFlows 的设计本质是“可变元组”,利用对象引用的可变性绕过基本类型的不可变传递限制。
  • ? 若需更通用解法(如支持任意数量参数),可考虑使用数组 float[] 或 AtomicFloat(需 Java 9+ VarHandle 或第三方库),但本题限定使用 TwoFlows,故无需过度扩展。

通过本例,你不仅完成了作业,更深入理解了 Java 参数传递的本质,以及如何在语言限制下巧妙模拟高级传递语义。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
css中float用法
css中float用法

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

597

2024.04.28

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

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

108

2025.10.23

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

848

2023.08.22

java值传递和引用传递有什么区别
java值传递和引用传递有什么区别

java值传递和引用传递的区别:1、基本数据类型的传递;2、对象的传递;3、修改引用指向的情况。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

109

2024.02.23

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

5

2026.03.18

Java Spring Security权限控制与认证机制实战
Java Spring Security权限控制与认证机制实战

本专题围绕 Java 后端安全体系建设展开,重点讲解 Spring Security 在权限控制与认证机制中的应用实践。内容涵盖用户认证流程、权限模型设计、JWT 鉴权方案、OAuth2 集成以及接口安全防护策略。通过实际项目案例,帮助开发者构建安全可靠的后端认证体系,提升系统安全性与可扩展能力。

21

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

138

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

14

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

15

2026.03.17

热门下载

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

精品课程

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

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.6万人学习

Java 教程
Java 教程

共578课时 | 84.1万人学习

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

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