【发布时间】:2015-04-17 04:09:40
【问题描述】:
当我将对象引用(数组是对象)传递给方法时,值会被传递,对吧?
在下面的代码中,初始值为:333。方法通过后,值发生了变化。为什么?在这种情况下是引用传递而不是值吗?
数组是“特殊情况”吗?
public static void main(String[] args) {
int[] myArray = { 333 };
valueOrRef(myArray); // Value or Reference?
System.out.println(myArray[0]); // 777 (changed)
}
public static void valueOrRef(int[] myArgument) {
myArgument[0] = 777;
}
另一种方法:(逻辑“传值”):
public static void main(String[] args) {
int[] myArray = { 333 };
valueOrRef(myArray[0]); // Value or Reference?
System.out.println(myArray[0]); // 333 (after method still unchanged)
}
public static void valueOrRef(int myArray2) {
myArray2 *= 2;
}
【问题讨论】:
-
传递了对数组的引用。但是这个引用是按值传递的。
-
作为副本关闭的问题在更一般的层面上解决了这个问题,而不是专门针对数组。除了那里提供的答案之外,还必须意识到数组是一个对象,并且诸如
{ 333 }之类的初始化表达式会将数组放在堆上。
标签: java arrays pass-by-reference pass-by-value