Java函数参数是否总是按值传递给数组?

时间:2012-12-14 10:53:45

标签: java arrays pass-by-value

  

可能重复:
  Is Java “pass-by-reference”?

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

method(array);

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

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

6 个答案:

答案 0 :(得分:7)

不,不会复制数组。

在Java中,所有内容都始终按值传递

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

当你调用一个采用非基本类型参​​数的方法时,引用按值传递 - 这意味着,引用本身被复制,但不是它所引用的对象。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

Java总是按值传递。传递的值是基本类型的变量值,以及对象的变量保持的引用值。

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

答案 4 :(得分:0)

  

Java将对象作为值传递的引用传递。

因此堆中只有一个Object副本。请查看以下示例:来自Is 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

答案 5 :(得分:0)

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

  1. 在Java中,一切都是按值传递的。

  2. 数组本身就是一个对象。

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

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