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