本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is Java"pass-by-reference"?

如果我们有大的byte[]数组(如40Mb),我们想用方法发送它

method(array);

数组会被复制吗? 因此,Java env => 80Mb内存将增加另外40Mb,对吗?

如果是,我们如何在调用方法后销毁'first'数组?

不,数组不会被复制。

在Java中,一切都始终按值传递。

非基本类型的变量是对对象的引用。数组是一个对象,数组类型的变量是对该数组对象的引用。

当您调用采用非基本类型参??数的方法时,引用将按值传递 - 这意味着,引用本身将被复制,但不会复制它引用的对象。

Java总是按值传递。传递的值是基本类型情况下变量的值,以及在Object的情况下由变量保存的引用值。

在这种情况下,数组是一个Object,通过value传递的是对该Object的引用。所以不,数组不会被复制。

变量array实际上只是对数组对象的引用。将array传递给函数时,只是复制引用而不是引用引用的实际数组。

不会创建新的Object,只需将参考复制到函数参数。

不,数组不会被复制。事实上,因为:

在Java中,一切都始终按值传递。

数组本身就是一个对象。

因此,结果是array'将复制方法,但它包含的东西:字节元素不复制。因此,您在method中更改数组的所有内容都会影响原始数组。

所以,内存不会像你看到的那样加倍:)

只是好奇,在第2点,"数组"扩展"对象"?:-)

java中的每个对象都扩展了Object;)

一个基元数组是一个对象?

确实!

stackoverflow.com/questions/12806739/
Java passes objects as references passed by value.

所以在堆中只有一个Object副本。请查看以下示例:From Java是"pass-by-reference"?

public void foo(Dog d) {
d.name.equals("Max"); // true
d = new Dog("Fifi");
d.name.equals("Fifi"); // true
}
Dog aDog = new Dog("Max");
foo(aDog);
aDog.name.equals("Max"); // true