【发布时间】:2011-01-29 07:21:34
【问题描述】:
我想知道,在 java 中,无论如何都可以模拟数组的引用传递吗?是的,我知道该语言不支持它,但无论如何我可以做到。比如说,我想创建一个方法来反转数组中所有元素的顺序。 (我知道这段代码 sn-p 不是最好的例子,因为有更好的算法可以做到这一点,但这是我想要为更复杂的问题做的事情的一个很好的例子)。
目前,我需要制作这样的课程:
public static void reverse(Object[] arr) {
Object[] tmpArr = new Object[arr.length];
count = arr.length - 1;
for(Object i : arr)
tmpArr[count--] = i;
// I would like to do arr = tmpArr, but that will only make the shallow
// reference tmpArr, I would like to actually change the pointer they passed in
// Not just the values in the array, so I have to do this:
for(Object i : tmpArr)
arr[count++] = i;
return;
}
是的,我知道我可以只交换值直到我到达中间,这样会更有效率,但对于其他更复杂的目的,我是否可以操纵实际的指针?
再次感谢您。
【问题讨论】:
-
一个数组从 java.lang.Object 扩展而来。 Java 中的对象总是通过引用传递。
-
@Dan:不! 对 Java 中对象的引用是按值传递。是的,这意味着完全不同的东西。
-
这很好地解释了它:stackoverflow.com/questions/40480/is-java-pass-by-reference/…“Java 总是按值传递。很难理解 Java 将对象作为按值传递的引用传递。”
-
@polygenelubricants:如何区分通过引用传递的值和通过值传递的引用?
-
在 Java 中,没有必要区分这两种机制,因为其中一种机制是不可能的;一切都是按值传递的。如果您想真正理解每个定义的真正含义,我建议您阅读一些内容。
标签: java arrays pass-by-reference