Es kommt alles von Hardware.
Ein Byte ist die kleinste adressierbare Speichereinheit auf den meisten Hardwarekomponenten.
Jeder Typ, den Sie gerade erwähnt haben, besteht aus mehreren Bytes.
Ein Byte besteht aus 8 Bits. Damit können Sie 8 Boolesche Werte ausdrücken, aber Sie können nicht immer nur einen nachschlagen. Sie adressieren 1, Sie adressieren alle 8.
Früher war es so einfach, aber dann sind wir von einem 8-Bit-Bus zu einem 16-, 32- und jetzt 64-Bit-Bus übergegangen.
Das heißt, solange wir noch auf Byte-Ebene adressieren können, können wir kein einzelnes Byte mehr aus dem Speicher abrufen, ohne die benachbarten Bytes abzurufen.
Angesichts dieser Hardware haben sich die Sprachentwickler dafür entschieden, Typen auszuwählen, die es uns ermöglichen, Typen auszuwählen, die zur Hardware passen.
Sie können behaupten, dass ein solches Detail entfernt werden kann und sollte, insbesondere in einer Sprache, die auf jeder Hardware ausgeführt werden soll. Dies hätte versteckte Leistungsprobleme, aber Sie könnten Recht haben. Das ist einfach nicht so passiert.
Java versucht dies tatsächlich. Bytes werden automatisch zu Ints hochgestuft. Eine Tatsache, die Sie verrückt macht, wenn Sie zum ersten Mal versuchen, ernsthafte Änderungen daran vorzunehmen.
Warum hat es nicht gut funktioniert?
Das große Verkaufsargument von Java war damals, dass man sich mit einem bekannten guten C-Algorithmus hinsetzen, es in Java tippen und mit kleinen Optimierungen würde es funktionieren. Und C ist sehr nah an der Hardware.
Das beizubehalten und die Größe von integralen Typen zu abstrahieren, funktionierte einfach nicht zusammen.
Also könnten sie haben. Sie haben es einfach nicht getan.
Vielleicht möchte der Programmierer nicht, dass jemand eine größere Zahl als eine bestimmte Größe verwenden kann, und dies ermöglicht es ihm, diese zu begrenzen.
Das ist gültiges Denken. Dafür gibt es Methoden. Die Klemmfunktion für einen. Eine Sprache könnte so weit gehen, beliebige Grenzen in ihre Typen zu setzen. Und wenn diese Grenzen zur Kompilierungszeit bekannt sind, können Sie die Speicherung dieser Zahlen optimieren.
Java ist einfach nicht diese Sprache.