Actualmente, he estado trabajando con bytes un poco últimamente y pueden ser molestos. Se convierten en ints a la menor provocación y no hay ninguna designación para convertir un número en byte; por ejemplo, 8l le dará un valor largo 8, pero para byte debe decir (byte) 8
Además de eso, (más o menos) siempre se almacenarán internamente como datos a menos que esté usando una matriz (y tal vez incluso entonces ... no estoy seguro).
Creo que simplemente asumen que la única razón para usar un byte es i/o donde realmente necesitas 8 bits, pero internamente esperan que siempre uses ints.
Por cierto, un byte puede realizar peor ya que siempre tiene que ser enmascarado ...
Al menos Recuerdo haber leído que hace años, podría haber cambiado por ahora.
Como ejemplo respuesta a su pregunta específica, si una función (f) tomó un byte, y que tenía dos bytes (B1 y B2), entonces:
f(b1 & b2)
no quiere trabajar, porque b1 & b2 se convertiría a un int, y el int no se podría convertir de forma automática (pérdida de precisión). Entonces tendría que codificar:
f((byte)(b1 & b2))
Lo cual sería irritante.
Y no se moleste en preguntar POR QUÉ b1 & b2 up-converts - ¡Últimamente he hablado de eso un poco!
Solo tiene que emitir valores que son mayores que 0x7F, porque los bytes están firmados. No hay nada irritante en eso. Es mucho mejor que tener un montón de char sin firmar/firmado. Use IDE, verificará la seguridad del tipo y hará el yeso por usted. La operación de máscara es una instrucción, no afecta el rendimiento. –