На самом деле, в последнее время я немного работал с байтами, и они могут раздражать. Они преобразуют в целые числа при малейшей провокации, и нет никакого обозначения, чтобы превратить число в байт - например, 8l даст вам длинное значение 8, но для байта нужно сказать (байт) 8
Кроме того, они (в значительной степени) всегда будут храниться внутри как целые, если вы не используете массив (и, может быть, даже тогда ... не уверен).
Я думаю, они просто в значительной степени предполагают, что единственная причина использования байта - это ввод-вывод, когда вам действительно нужно 8 бит, но внутри они ожидают, что вы всегда будете использовать целые числа.
Кстати, байт может работать хуже, поскольку его всегда нужно маскировать ...
По крайней мере, я помню, как читал, что годы назад могли бы измениться.
В качестве примера ответа на ваш конкретный вопрос, если функция (f) заняла байт, а у вас было два байта (b1 и b2), то:
f(b1 & b2)
не будет работать, потому что b1 и b2 будут преобразованы с повышением в int, а int не может быть преобразовано с понижением автоматически (потеря точности). Таким образом, вы должны были бы кодировать:
f( (byte)(b1 & b2) )
Что бы раздражать.
И не спрашивайте, ПОЧЕМУ b1 и b2 повышают - я сам недавно об этом ругался!