Yanıtlar:
Yapamazsın. Temel bir sayısal sabit bir tamsayı olarak kabul edilir (ya da bir "L" ile uzunsa), bu nedenle parametre olarak iletmek için onu bir bayta açık şekilde indirmelisiniz. Bildiğim kadarıyla kısayol yok.
byte b(int i) { return (byte) i; }
yerde basit bir yardımcı yöntem tanımlayabilir ve statik olarak içe aktarabilirsiniz. Sonra f (b (10)) yazabilirsiniz.
Korkmalısın, korkarım:
f((byte)0);
Bunun derleme- zamanında yürütme zamanı yerine uygun dönüşümü gerçekleştireceğine inanıyorum , bu yüzden aslında performans cezalarına neden olmayacak. Bu sadece elverişsiz :(
Java'da bir bayt değişmezi kullanabilirsiniz ... tür.
byte f = 0;
f = 0xa;
0xa
(int literal) otomatik olarak bayta alınır. Bu gerçek bir bayt değişmez değil (bkz. JLS & yorumlar aşağıdaki), ama bir ördek gibi quacks, ben bir ördek diyorum.
Yapamayacağınız şey şudur:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Aşağıdaki gibi döküm yapmalısınız:
foo( (byte) 0xa );
Ancak bunların hepsinin derleneceğini ve "bayt değişmez değerleri" kullandığını unutmayın:
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Tabii ki bu da
foo( (byte) 1 ); //compiles
1
int interal, ama double d = 1;
derli toplu.
byte b(int i){}
, sonra b(1)
daha uzun ve daha az zor f=1
.
Değişmezleri kod içinde geçiriyorsanız, bunu önceden bildirmekten alıkoyan şey nedir?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
bazı kötü işaret uzantısı hataları almak istemiyorum fark etti .
Yöntemi geçersiz kılmaya ne dersiniz?
void f(int value)
{
f((byte)value);
}
bu izin verecek f(0)
Java 7 ve sonraki sürümlerinde bir bayt değişmezini şu şekilde belirtebilirsiniz:
byte aByte = (byte)0b00100001;
Referans: http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html