Вы никогда не передадите «весь объект» в Java.То, что передается, является ссылкой, размером примерно с int
или около того.То, что вы передаете - ссылка на объект или int
ID - не влияет на производительность с точки зрения вызова самой функции.
Однако передача ссылки на объект означает, что вы можете действовать непосредственно наобъект, в то время как передача идентификатора означает, что если вам нужен доступ к объекту, вам нужно снова найти его по идентификатору, что может оказать негативное влияние на производительность.
Редактировать : На основании вашего обновления:
Я понимаю, что здесь нет проблем с производительностью, так как размер ссылки на объект одинаков в обоих случаях.Но что касается стиля / перспективы дизайна API, какой вариант является лучшим?
Это полностью меняет вопрос (и, кажется, полностью отбрасывает часть «производительности»).
Это полностью зависит от A) Что вы будете делать в doSomeOperation
, и B) Какую информацию, скорее всего, будут иметь абоненты из doSomeOperation
.
Если doSomeOperation
потребуется больше, чем просто идентификатор пользователя, затем, конечно, передайте объект.
Если doSomeOperation
не нужно ничего, кроме идентификатора пользователя, то вы, вероятно, хотите просто передатьв удостоверении личности.Есть компромиссы.Если вы передаете только int
ID, с одной стороны, doSomeOperation
теряет связь с User
(что обычно хорошо);с другой стороны, аргумент doSomeOperation
становится в значительной степени бессмысленным.(int
может быть чем угодно; но User
имеет значение.)
Если doSomeOperation
принимает аргумент User
, но на самом деле нужен только идентификатор пользователя, вы обременяете вызывающих абонентовdoSomeOperation
: Если у них просто есть идентификатор, они должны искать объект исключительно с целью передачи его в doSomeOperation
(который затем будет игнорировать все, кроме идентификатора).Это явно плохо с точки зрения производительности.
Итак, я думаю, что сводка такова: если для doSomeOperation
требуется что-то из User
, кроме его идентификатора, передайте User
.Если ему нужен только идентификатор и ничего не нужно от User
, просто передайте идентификатор.