首先看一個問題,我們知道byte是一個8位整數的基本類型,範圍-128到127,我們可以這樣說使用:
但是,當我們定這樣一個方法:
竟然會報編譯錯誤,我們感覺到很奇怪,為什麼會出現這樣的情況?
字面值,顧名思義就是表面上的值,例如整型字面值在源代碼中就是諸如5,0,-200這樣的。
java字面值的規則:
如果整型字面值後面加上l或者l,則這個字面值就是long類型,比如:1000l代表一個long類型的值。
如果整型字面值不加l或者l,則為預設int類型,比如:1000代表一個int類型的值。
如果浮點字面值後面加上f或者f,則這個字面值就是float類型,比如:0.1f代表一個float類型的值。
如果浮點字面值不加f或者f,或者加上d或者d,則為doublie類型,比如:0.1、0.1d代表一個double類型的值。
浮點字面值支援科學計數法表示,比如:1.23e-4代表一個double類型值的科學計數法表達式。
在指派操作中,不加l/l的整型字面值字面值可以賦給byte、short、int、long,java會自動處理好這個過程(對于long類型,如果大小沒有超出int所能表示的範圍:32bits,則可以不使用l/l結尾來表示;反之則必須要加)。
但在方法調用中,則完全不同, 當調用test.a(0)時,java會将0這個字面值認為是int類型的,它能比對的方法是a(int),而不是a(byte),當然不能通過編譯。
上面我們說的都是10進制字面值,如果要表示其他進制如下:
16進制:0x or 0x字首,例如:0x32
10進制:無字首,例如:50
8進制:0字首,例如:062
2進制:0b or 0b字首,例如:0b00110010
以上例子結果均表示50(十進制),當然這些在jdk 7之後才有。
我們先看一個例子:
首先沒有編譯錯誤,運作後結果如下:
byte:97
說明byte a = ‘a’;是合法的,也就是說字元字面值可以自動轉換成16位的整數。間接說明char類型是一種特殊的整型資料類型。
原文位址:http://blog.csdn.net/ooppookid/article/details/51291096