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免费学习笔记(深入)”;

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

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

下载

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

// 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 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 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 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

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
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

if什么意思
if什么意思

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

785

2023.08.22

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

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

108

2024.02.23

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

热门下载

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

精品课程

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

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.2万人学习

Java 教程
Java 教程

共578课时 | 55万人学习

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

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