Jawaban:
Kamu tidak bisa. Konstanta numerik dasar dianggap sebagai bilangan bulat (atau panjang jika diikuti oleh "L"), jadi Anda harus menurunkannya secara eksplisit ke byte untuk meneruskannya sebagai parameter. Sejauh yang saya tahu tidak ada jalan pintas.
byte b(int i) { return (byte) i; }
suatu tempat dan mengimpornya secara statis. Maka Anda dapat menulis f (b (10)).
Anda harus memilih, saya khawatir:
f((byte)0);
Saya percaya bahwa akan melakukan konversi yang sesuai pada waktu kompilasi alih-alih waktu eksekusi , jadi itu tidak benar-benar akan menyebabkan hukuman kinerja. Itu hanya nyaman :(
Anda dapat menggunakan byte literal di Java ... semacam.
byte f = 0;
f = 0xa;
0xa
(int literal) secara otomatis dilemparkan ke byte. Ini bukan byte sebenarnya (lihat JLS & komentar di bawah), tetapi jika itu seperti bebek, saya menyebutnya bebek.
Yang tidak bisa Anda lakukan adalah ini:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Anda harus berperan sebagai berikut:
foo( (byte) 0xa );
Tetapi perlu diingat bahwa ini semua akan dikompilasi, dan mereka menggunakan "byte literal":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Tentu saja ini mengkompilasi juga
foo( (byte) 1 ); //compiles
1
adalah int literal, tetapi double d = 1;
kompilasi dengan baik.
byte b(int i){}
, maka b(1)
selama dan kurang rumit daripada f=1
.
Jika Anda memasukkan literal dalam kode, apa yang menghentikan Anda dari hanya menyatakannya sebelumnya?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
agar saya mendapatkan beberapa bug ekstensi tanda buruk.
Bagaimana dengan mengganti metode dengan
void f(int value)
{
f((byte)value);
}
ini akan memungkinkan f(0)
Dengan Java 7 dan versi yang lebih baru, Anda dapat menentukan byte literal dengan cara ini:
byte aByte = (byte)0b00100001;
Referensi: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html