Itu semua berasal dari perangkat keras.
Byte adalah unit memori terkecil yang dapat dialamatkan pada sebagian besar perangkat keras.
Setiap jenis yang Anda sebutkan dibangun dari beberapa byte.
Satu byte adalah 8 bit. Dengan itu Anda bisa mengekspresikan 8 boolean tetapi Anda tidak bisa melihat satu per satu. Anda mengalamatkan 1, Anda mengalamatkan semua 8.
Dulu sesederhana itu tetapi kemudian kami beralih dari bus 8 bit ke bus 16, 32, dan sekarang 64 bit.
Yang berarti sementara kita masih bisa mengatasi pada tingkat byte kita tidak dapat mengambil lagi satu byte dari memori tanpa mendapatkan byte tetangganya.
Menghadapi perangkat keras ini, perancang bahasa memilih untuk mengizinkan kami memilih jenis yang memungkinkan kami memilih jenis yang sesuai dengan perangkat keras.
Anda dapat mengklaim bahwa perincian seperti itu dapat dan harus disarikan terutama dalam bahasa yang bertujuan untuk berjalan pada perangkat keras apa pun. Ini akan memiliki masalah kinerja yang disembunyikan tetapi Anda mungkin benar. Itu tidak terjadi begitu saja.
Java sebenarnya mencoba melakukan ini. Bytes secara otomatis dipromosikan menjadi Ints. Sebuah fakta yang akan membuat Anda gila ketika pertama kali Anda mencoba melakukan pekerjaan menggeser sedikit serius di dalamnya.
Jadi mengapa itu tidak berhasil?
Titik penjualan besar Java pada zaman dulu dimana Anda bisa duduk dengan algoritma C yang baik dan dikenal baik, mengetiknya di Jawa, dan dengan sedikit perubahan akan berhasil. Dan C sangat dekat dengan perangkat keras.
Menjaga agar ukuran yang berjalan dan abstrak keluar dari tipe integral tidak bekerja bersama-sama.
Jadi mereka bisa melakukannya. Mereka tidak melakukannya.
Mungkin programmer tidak ingin seseorang dapat menggunakan angka yang lebih besar dari ukuran tertentu dan ini memungkinkan mereka untuk membatasinya.
Ini pemikiran yang valid. Ada metode untuk melakukan ini. Fungsi penjepit untuk satu. Suatu bahasa bisa sejauh memanggang batas acak ke dalam jenis mereka. Dan ketika batas-batas itu diketahui pada waktu kompilasi yang akan memungkinkan optimasi dalam bagaimana angka-angka itu disimpan.
Java bukan bahasa itu.