Мне было интересно, можно ли в java, смоделировать pass by reference для массива? Да, я знаю, язык не поддерживает его, но я все равно могу это сделать. Скажем, например, я хочу создать метод, который изменяет порядок всех элементов в массиве. (Я знаю, что этот фрагмент кода - не лучший пример, так как для этого есть лучшие алгоритмы, но это хороший пример того, что я хочу сделать для более сложных проблем).Моделирование передачи по ссылке для ссылки на массив (например, ссылка на ссылку) в Java
В настоящее время, мне нужно сделать класс вроде этого:
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
@ Dan: НЕТ! _Примечания к объектам в Java _passed значением_. И да, это означает что-то совершенно другое. – polygenelubricants
Это объясняет это хорошо: http://stackoverflow.com/questions/40480/is-java-pass-by-reference/40523#40523 «Java всегда передается по значению. Трудно понять, что Java передает объекты в качестве ссылок, передаваемых по значению ». –