2011-07-29 45 views
21

比方說,我有一個類A創建一個相當大的對象B的實例。是否將B作爲參數傳遞給C類中的方法效率低下?

也就是說,它只是傳遞一個引用,還是它也轉移對象的內存?在Java中傳遞大對象作爲參數效率不高嗎?

謝謝。

+2

輝煌的問題。即將問同樣的事情,很高興看到答案:)當我想要幾件作品時,我害怕通過參數傳遞所有對象。很高興看到它們只是引用 –

+0

所有變量都是原語(最多8個字節)或引用(也最多8個字節)所以不可能將多於8個字節的參數傳遞給方法,並且不會會對性能產生影響。 –

回答

47

它只是傳遞一個參考。要明白的任何表達Java中的值是從未對象是很重要的。它只有有史以來一個參考或原始值。

這不是一個參數傳遞只是有關 - 重要的是要理解收益類型,數組,簡單的賦值等

+0

很多次你的答案對我有幫助。不幸的是,每個帖子只有1加! Jon Skeet有沒有關於如何像Jon Skeet一樣成爲程序員的建議? – Tarek

6

它不是低效率的,因爲只有對象的引用被傳遞到方法中。

1

它只是傳遞一個作爲參考值。

10

Java可以只傳遞兩個類型的值的一種方法:

  • 原始值(intchardouble,...)或
  • 對象引用

有沒有你可以通過「價值」來傳遞整個對象。

這意味着你不必擔心你的對象「有多大」是你「繞過」。

1

的Java按值傳遞對象引用。對於傳遞給C的對象引用是否大,在性能方面沒有區別。

2

有沒有像存儲器中移位..它只是傳遞的實際參考..和自己代表的一些地址參考字..所以沒有問題..比參數傳遞,真正使代碼更復雜的效率。5月是這就是爲什麼SUN它添加到Java ...

2

正如其他人所說,在Java中,你只需要傳遞的價值。這些值只是原語和參考。基元或引用的最大值可以是8個字節。恕我直言,沒有這樣的事情作爲一個大的論點。

4

只要你的調用是本地的(相同的JVM)對象大小應該沒有關係,但是當你的應用程序使用RMI/Web服務等遠程調用(跨JVM)時,大對象能夠減慢你的應用程序的速度因爲大量的數據將被編組/非編組以及每個遠程調用所涉及的網絡延遲。

相關問題