Java函数参数是否总是按数组的值传递?
可能重复:Java函数参数是否总是按数组的值传递?,java,arrays,pass-by-value,Java,Arrays,Pass By Value,可能重复: 如果我们有一个大的字节[]数组(比如40Mb),并且我们想用方法发送它 method(array); 是否要复制阵列?因此,在Javaenv=>80Mb中,内存将再增加40Mb,对吗 如果是,调用该方法后如何销毁“first”数组?不会创建新的对象,只会将引用复制到函数参数。变量数组实际上只是对数组对象的引用。将数组传递给函数时,只是复制引用,而不是引用引用的实际数组。Java始终是按值传递的。对于基元类型,传递的值是变量的值;对于对象,传递的值是变量持有的引用的值 在本例中,数
如果我们有一个大的
字节[]
数组(比如40Mb),并且我们想用方法发送它
method(array);
是否要复制阵列?因此,在Javaenv=>80Mb中,内存将再增加40Mb,对吗
如果是,调用该方法后如何销毁“first”数组?不会创建新的
对象,只会将引用复制到函数参数。变量数组
实际上只是对数组对象的引用。将数组
传递给函数时,只是复制引用,而不是引用引用的实际数组。Java始终是按值传递的。对于基元类型,传递的值是变量的值;对于对象,传递的值是变量持有的引用的值
在本例中,数组是一个对象,通过值传递的是对该对象的引用。因此,不,将不复制阵列。不,将不复制阵列
在Java中,一切都总是通过值传递
非基本类型的变量是对对象的引用。数组是一个对象,数组类型的变量是对该数组对象的引用
调用采用非基元类型参数的方法时,引用通过值传递——这意味着复制引用本身,而不是它引用的对象
Java通过值传递对象作为引用
所以堆中只有一个对象副本。查找以下示例:From
否,将不复制阵列。事实上,因为:
在Java中,所有内容都是按值传递的
数组本身是一个对象
因此,结果是array'
将复制方法,但它包含的内容:bytes元素不会复制。因此,在方法中更改数组的所有内容都将影响原始数组
所以,内存不会像您看到的那样加倍:)只是好奇,在第2点,“数组”是否扩展了“对象”?:-)java中的每个对象都扩展了对象;)原语数组是一个对象?的确!另见
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