1. Встроенные типы лучше передавать по значению. С точки зрения эффективности разницы практически нет, поскольку встроенные типы занимают минимальную память, и создание временных переменных и копирование их значений выполняется быстро.
2. Если в функции или методе значение аргумента используется, но не изменяется, передавайте аргумент по неизменяемой ссылке.
3. Передачу изменяемой ссылки необходимо применять только тогда, когда функция должна изменить переменную, ссылка на которую передается.
4. Передача по указателю используется, только если функции нужен именно указатель, а не значение объекта.