簡體   English   中英

傳遞Java對象的最有效方法?

[英]Most efficient way to pass a Java object around?

我正在考慮創建以下方法:

public static MyBigCollection doSomeStuff(MyBigCollection m) { ... return m; }

然后在另一個方法中(也許在另一個類中),像這樣使用它:

MyBigCollection mbc = new MyBigCollection();
mbc = stuffClass.doSomeStuff(mbc);

我是否要采用正確的方法-這是對對象“做些事”的有效方法嗎? 為了擴展性,我想像這樣折斷。 我一直在做c#這么久了,我不確定使用java。 在c#中,該方法可以返回void,而我可以簡單地調用doSomeStuff(mbc)-這將有效地通過引用傳遞我的對象並對它進行處理。 我一直在閱讀Java的工作方式有所不同,因此我想在這里與專家核實。

我會重構為:

stuffClass.doSomeStuff(mbc);

(即修改mbc並返回void的方法)

請記住,所有Java對象都存儲在堆內存中,並與引用指針一起傳遞。

這樣做的方式很好,但是實際上不需要在方法末尾return對象。 因此,以下操作會更簡單...

MyBigCollection mbc = new MyBigCollection();
stuffClass.doSomeStuff(mbc);

Java中的對象是通過引用傳遞的,因此在方法調用結束后,對doSomeStuff()方法中mbc對象的任何修改仍將保留在mbc變量中。

您可能考慮return mbc對象的唯一原因是,如果您希望能夠將多個方法結合在一起,例如...

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

在這種情況下,由於mbc由每個doStuff()方法返回,因此可以直接將下一個方法直接調用到同一Object。 在不return參考的情況下,您必須要做類似的事情...

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

這是同一件事,但並不那么緊湊。 實際情況取決於您打算如何使用方法和對象本身。

只有一種方法可以傳遞Java對象。 Java通過價值傳遞一切 對象不被傳遞; 他們生活在堆上。 您傳遞引用,而不是對象。

據我所知,與C#相同。

這種微優化通常是沒有意義的。

我認為您的問題是Java如何將引用傳遞給對象。 Java按值傳遞,這在第一次說時會造成混淆。 對於對象,這意味着將對對象的引用的值傳遞給該方法。 與該值所引用的對象進行交互將更改“傳入”的對象,因此您無需返回它。

字符串是不可變的,因此要區別對待。 基元也按值傳遞,但是由於傳遞的值不是引用,因此您不會更改原始變量。

測試此問題的最簡單方法是編寫一些代碼並觀察(您可能還會考慮Java教程)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM