Подтвердить что ты не робот

Неэффективно ли передавать большие объекты в качестве параметров в Java?

Скажем, например, у меня есть класс A, который создает экземпляр довольно большого объекта B. Проходит ли B как параметр метода в классе C неэффективно?

То есть, просто ли он передает ссылку или он также перемещает память объекта?

Спасибо.

4b9b3361

Ответ 1

Он просто передает ссылку. Важно понимать, что значение любого выражения в Java никогда не является объектом. Это только когда-либо ссылочное или примитивное значение.

Это не просто релевантно для передачи параметров - важно понимать для типов возврата, массивов, простого назначения и т.д.

Ответ 2

Java может передавать только два типа значений в метод:

  • примитивные значения (int, char, double,...) или
  • ссылки на объекты

Невозможно передать весь объект "по значению".

Это означает, что вам не нужно беспокоиться о том, "насколько большой" ваш объект, что вы "проходите".

Ответ 3

Это не является неэффективным, потому что только метод объекта передается методу.

Ответ 4

Пока размер ваших вызовов локальный (тот же JVM) не имеет значения, однако, когда ваше приложение использует удаленные вызовы, такие как RMI/Web Service (через JVM), крупные объекты способны в значительной степени замедлить ваше приложение из-за огромного объема данных, которые будут распределены/немаршарированы, и задержка в сети для каждого удаленного вызова.

Ответ 5

Нет ничего похожего на смену памяти... он просто передает фактическую ссылку.. и само справочное слово означает какой-то адрес.. поэтому нет проблемы.. его эффективность, чем передача параметров, которая действительно делает код более сложным.. может быть вот почему SUN добавила его в java...

Ответ 6

Как говорили другие, на Java у вас есть только пропускная способность. Эти значения являются только примитивами и ссылками. Самый большой примитив или ссылка может быть 8-байтным. ИМХО, нет такого понятия, как большой аргумент.

Ответ 7

Он просто передает ссылку как значение.

Ответ 8

Java передает ссылки на объекты по значению. Не имеет значения, зависит ли производительность объекта от ссылки на C большой или нет.