[英]How do you specify a byte literal in Java?
如果我有方法
void f(byte b);
如何在不進行強制轉換的情況下使用數字參數調用它?
f(0);
給出一個錯誤。
你不能。 基本數字常量被認為是整數(如果后面跟有“ L”,則為整數),因此必須將其顯式下轉換為字節,以將其作為參數傳遞。 據我所知,沒有捷徑可走。
恐怕您必須投下:
f((byte)0);
我相信它將在編譯時而不是執行時執行適當的轉換,因此實際上不會造成性能損失。 只是不方便:(
您可以在Java中使用字節文字…。
byte f = 0;
f = 0xa;
0xa
(int文字)將自動轉換為字節。 它不是真正的字節文字(請參閱下面的JLS和注釋),但是如果它像鴨子一樣嘎嘎叫,我就稱它為鴨子。
您不能執行以下操作:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
您必須進行如下鑄造:
foo( (byte) 0xa );
但是請記住,這些都將編譯,並且它們使用的是“字節文字”:
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
當然也可以編譯
foo( (byte) 1 ); //compiles
如果要在代碼中傳遞文字,是什么使您無法簡單地提前聲明它?
byte b = 0; //Set to desired value.
f(b);
怎樣用
void f(int value)
{
f((byte)value);
}
這將允許f(0)
在Java 7和更高版本中,您可以通過這種方式指定字節文字: byte aByte = (byte)0b00100001;
參考: http : //docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.