You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java函数为何返回已传入的参数对象?两种写法差异解析

关于Java对象修改方法两种写法的疑问与解析

我在查看一段Java代码时,对作者的写法产生了疑惑——测试后发现两种写法功能完全一致,但写法上有明显区别:

写法一

SomeObject modifyObject(SomeObject o){
    SomeObject p = o;
    
    // 执行修改p的逻辑
    
    return p;
}

var x = new SomeObject();
x = modifyObject(x);

写法二

void modifyObject(SomeObject o){
    
    // 执行修改o的逻辑

}

var x = new SomeObject();
modifyObject(x);

针对这两种写法,我整理了三个具体问题及对应的分析:

1. 为何返回SomeObject而非void?

核心原因是支持方法链式调用。虽然当前代码里没有用到链式调用,但这种写法预留了扩展空间,后续可以直接写出modifyObject(x).doAnotherOperation()这类链式代码,让逻辑更连贯简洁。

2. 为何将参数o赋值给局部变量p,而非直接操作o?

从Java引用传递的机制来看,这个操作完全没必要——o和p指向同一个对象,修改p的属性本质就是修改原对象。这大概率是作者的个人编码习惯,意图可能是通过重命名变量提升可读性,但实际效果因人而异,对部分开发者来说反而会增加理解成本。

3. 为何将方法调用结果重新赋值给已传入的同一个变量?

从功能上看这一步是多余的,因为原对象已经被修改。可能的原因有两点:

  • 一是和返回对象的写法保持统一,让代码逻辑看起来更“完整”,明确传递“变量接收修改后结果”的意图;
  • 二是作者可能混淆了引用类型与原始类型的处理逻辑,习惯性地做了赋值操作。

内容的提问来源于stack exchange,提问作者Lothar Haeger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:40:01