2011-07-29 19 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)时,大对象能够减慢你的应用程序的速度因为大量的数据将被编组/非编组以及每个远程调用所涉及的网络延迟。

相关问题