Huruf 127 menunjukkan nilai tipe int. Begitu juga dengan literal 1. Jumlah keduanya adalah bilangan bulat 128. Masalahnya, dalam kasus kedua, adalah bahwa Anda menetapkan ini ke variabel tipe byte. Itu tidak ada hubungannya dengan nilai aktual dari ekspresi. Ini ada hubungannya dengan Java yang tidak mendukung paksaan (*). Anda harus menambahkan typecast
byte b = (byte)(127 + 1);
dan kemudian mengkompilasi.
(*) setidaknya bukan dari jenis String-to-integer, float-to-Time, ... Java memang mendukung paksaan jika mereka, dalam arti, non-loss (Java menyebut ini "pelebaran").
Dan tidak, kata "paksaan" tidak perlu dikoreksi. Itu dipilih dengan sangat sengaja dan benar pada saat itu. Dari sumber terdekat ke tangan (Wikipedia): "Dalam kebanyakan bahasa, kata paksaan digunakan untuk menunjukkan konversi tersirat , baik selama kompilasi atau selama waktu berjalan." dan "Dalam ilmu komputer, konversi tipe, typecasting, dan paksaan adalah cara yang berbeda , secara implisit atau eksplisit, mengubah entitas dari satu tipe data menjadi yang lain.".
byte
tipe data sangat menyakitkan ?!