Неэффективно ли передавать большие объекты в качестве параметров в Java?
Скажем, например, у меня есть класс A, который создает экземпляр довольно большого объекта B. Проходит ли B как параметр метода в классе C неэффективно?
То есть, просто ли он передает ссылку или он также перемещает память объекта?
Спасибо.
Ответы
Ответ 1
Он просто передает ссылку. Важно понимать, что значение любого выражения в Java никогда не является объектом. Это только когда-либо ссылочное или примитивное значение.
Это не просто релевантно для передачи параметров - важно понимать для типов возврата, массивов, простого назначения и т.д.
Ответ 2
Java может передавать только два типа значений в метод:
- примитивные значения (
int
, char
, double
,...) или
- ссылки на объекты
Невозможно передать весь объект "по значению".
Это означает, что вам не нужно беспокоиться о том, "насколько большой" ваш объект, что вы "проходите".
Ответ 3
Это не является неэффективным, потому что только метод объекта передается методу.
Ответ 4
Пока размер ваших вызовов локальный (тот же JVM) не имеет значения, однако, когда ваше приложение использует удаленные вызовы, такие как RMI/Web Service (через JVM), крупные объекты способны в значительной степени замедлить ваше приложение из-за огромного объема данных, которые будут распределены/немаршарированы, и задержка в сети для каждого удаленного вызова.
Ответ 5
Нет ничего похожего на смену памяти... он просто передает фактическую ссылку.. и само справочное слово означает какой-то адрес.. поэтому нет проблемы.. его эффективность, чем передача параметров, которая действительно делает код более сложным.. может быть вот почему SUN добавила его в java...
Ответ 6
Как говорили другие, на Java у вас есть только пропускная способность. Эти значения являются только примитивами и ссылками. Самый большой примитив или ссылка может быть 8-байтным. ИМХО, нет такого понятия, как большой аргумент.
Ответ 7
Он просто передает ссылку как значение.
Ответ 8
Java передает ссылки на объекты по значению. Не имеет значения, зависит ли производительность объекта от ссылки на C большой или нет.