传递Java对象最有效的方法是什么?

传递Java对象最有效的方法是什么?,java,oop,methods,reference,Java,Oop,Methods,Reference,我正在考虑创建以下方法: public static MyBigCollection doSomeStuff(MyBigCollection m) { ... return m; } 然后在另一个方法中,也许在另一个类中,使用它如下: MyBigCollection mbc = new MyBigCollection(); mbc = stuffClass.doSomeStuff(mbc); 我这样做对吗?这是对一个物体做一些事情的有效方法吗?为了可扩展性,我想中断这样的东西。我做c已经很长

我正在考虑创建以下方法:

public static MyBigCollection doSomeStuff(MyBigCollection m) { ... return m; }
然后在另一个方法中,也许在另一个类中,使用它如下:

MyBigCollection mbc = new MyBigCollection();
mbc = stuffClass.doSomeStuff(mbc);
我这样做对吗?这是对一个物体做一些事情的有效方法吗?为了可扩展性,我想中断这样的东西。我做c已经很长时间了,只是对java不太确定。在c语言中,该方法可以返回void,我可以简单地调用doSomeStuffmbc,这将有效地通过引用传递我的对象并对其执行一些操作。我一直在读到java的工作方式不同,所以我想在这里与专家们核实一下。

我想重构为:

stuffClass.doSomeStuff(mbc);
i、 例如,一种修改mbc并返回void的方法

请记住,所有Java对象都存储在堆内存中,并通过引用指针传递。

我将重构为:

stuffClass.doSomeStuff(mbc);
i、 例如,一种修改mbc并返回void的方法


请记住,所有Java对象都存储在堆内存中,并通过引用指针传递。

这样做很好,但实际上不需要在方法末尾返回对象。因此,以下内容将更简单

MyBigCollection mbc = new MyBigCollection();
stuffClass.doSomeStuff(mbc);
Java中的对象是通过引用传递的,因此在doSomeStuff方法中对mbc对象的任何修改都将在方法调用结束后保留在mbc变量中

<> P>您可以考虑返回MBC对象的唯一原因是,如果您希望能够一起加入多个方法,比如这个…

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1().doStuff2().doStuff3();
在这种情况下,由于mbc由每个doStuff方法返回,因此可以直接对同一对象调用下一个方法。在不返回引用的情况下,您必须执行类似的操作

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1();
mbc.doStuff2();
mbc.doStuff3();

这是一样的,但不是很紧凑。如何操作实际上取决于您打算如何使用方法和对象本身。

这样做很好,但实际上不需要在方法末尾返回对象。因此,以下内容将更简单

MyBigCollection mbc = new MyBigCollection();
stuffClass.doSomeStuff(mbc);
Java中的对象是通过引用传递的,因此在doSomeStuff方法中对mbc对象的任何修改都将在方法调用结束后保留在mbc变量中

<> P>您可以考虑返回MBC对象的唯一原因是,如果您希望能够一起加入多个方法,比如这个…

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1().doStuff2().doStuff3();
在这种情况下,由于mbc由每个doStuff方法返回,因此可以直接对同一对象调用下一个方法。在不返回引用的情况下,您必须执行类似的操作

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1();
mbc.doStuff2();
mbc.doStuff3();

这是一样的,但不是很紧凑。如何进行这项工作实际上取决于您打算如何使用方法和对象本身。

我认为您的问题是Java如何传递对对象的引用。Java按值传递,这在第一次说时可能会让人困惑。对于对象,这意味着将对象引用的值传递给方法。与值引用的对象交互将改变“传入”的对象,因此不需要返回它

字符串是不可变的,因此处理方式不同。原语也是按值传递的,但由于传递的值不是引用,因此不会更改原始变量


测试这个最简单的方法是编写一些代码,观察到你也可以考虑java教程

< p>我想你的问题是java如何传递对对象的引用。Java按值传递,这在第一次说时可能会让人困惑。对于对象,这意味着将对象引用的值传递给方法。与值引用的对象交互将改变“传入”的对象,因此不需要返回它

字符串是不可变的,因此处理方式不同。原语也是按值传递的,但由于传递的值不是引用,因此不会更改原始变量

测试此方法最简单的方法是编写一些代码,观察到您也可以考虑java教程

。只有一种方法可以传递java对象。Java通过值传递一切。对象不被传递;他们住在垃圾堆上。传递引用,而不是对象

就我所知,和C一样

这种微观优化通常毫无意义

传递Java对象的方法只有一种。Java通过值传递一切。对象不被传递;他们住在垃圾堆上。传递引用,而不是对象

就我所知,和C一样


这种微观优化通常毫无意义

您对mbc所做的更改将显示在程序的上层。换句话说,Java使用参考内存模型,就像C一样。您对mbc所做的更改将显示在程序的上层。换句话说,Java使用参考内存模型,就像C一样。我不认为Java与C有太大的不同。谢谢大家。我意识到这是一个错误
简单的问题,我被另一个线程甩了,因为我没有意识到海报指出将对象设置为新实例实际上并不能替换原来的实例。我不认为Java和C有什么不同。谢谢大家。我意识到这是一个简单的问题,我被另一条线索甩了,因为我没有意识到海报指出将对象设置为新实例实际上并不能替换原来的实例。从技术上讲,对象是按值传递的。该值恰好是数据所在堆上的地址。通过引用调用它是有误导性的,因为这使我们相信我们可以更改方法内部的指针并影响调用方看到的指针。事实并非如此。技术上,对象是按值传递的。该值恰好是数据所在堆上的地址。通过引用调用它是有误导性的,因为这使我们相信我们可以更改方法内部的指针并影响调用方看到的指针。事实并非如此。