La otra cosa es que, sobre todo por razones históricas, la mayoría de los datos se divide en bytes de 8 bits. Pudo haber sido cualquier número, pero las computadoras de 8 bits fueron muy populares cuando las cosas realmente se estaban normalizando, supongo.
Por lo tanto, el texto a menudo se almacena con un byte de 8 bits por letra (en modo ASCII). Los archivos de datos a menudo se indexan mediante punteros a índices de bytes. La gente habla de kilobytes y megabytes, y significan 1024 * 8 bits. o 2 * 8 bits.
Bytes son una especie de unidad universal de informática para muchos propósitos. Si desea editar un archivo estándar leído por otros programas, lo más probable es que necesite cargarlo en un byte [] y manipular bytes individuales en algún momento.
Si sun no incluye un tipo de datos de bytes, escribir programas Java que funcionen con datos o texto de otros programas habría sido un gran dolor. Tendría que cargar enteros, y desplazar yy operaciones para aislar bits individuales, y dividir índices por 4 todo el tiempo. No es divertido.
Así que los bytes no fueron realmente agregados para ahorrar memoria, sino por compatibilidad.
Como un byte puede tener uno de 2 = 256 valores posibles, Sun decidió que deberían denotar -128 a 127, en lugar de 0 a 255, porque no querían tener que firmar y no firmar números (todos sus tipos de datos están firmados, y Java no tiene la palabra clave unsigned como C/C++)
Utilizaron complemento de dos porque es la forma estándar de tratar con números negativos.