[英]Shift operators - operands must be convertible to an integer primitive?
我正准備參加Java考試,我正在閱讀“OCA Java SE 8程序員學習指南(考試1Z0-808)”。 在運營商部分,我發現了這句話:
移位運算符:移位運算符采用兩個操作數,其類型必須可轉換為整數基元。
我覺得很奇怪,所以我用很長時間測試它:
public class HelloWorld{
public static void main(String []args){
long test = 3147483647L;
System.out.println(test << 1);
}
}
並且它工作,沒有編譯器錯誤和結果是正確的。 這本書有錯誤還是我誤解了書中的引用?
移位運算符>>
和<<
在JLS第15.19節中定義。 引用:
對每個操作數分別執行一元數字提升(第5.6.1節)。 (不對操作數執行二進制數字提升(第5.6.2節)。)
如果在一元數字提升之后移位運算符的每個操作數的類型不是基本整數類型,則這是編譯時錯誤 。
在談到“整數原語”時,本書實際上是在談論“原始整數類型”(在JLS第4.2.1節中定義):
整數類型的值是以下范圍內的整數:
- 對於字節,從-128到127(含)
- 簡而言之,從-32768到32767,包括在內
- 對於int,從-2147483648到2147483647,包括在內
- 很長一段時間,從-9223372036854775808到9223372036854775807,包括
- 對於char,從'\\ u0000'到'\\ uffff',包括0到65535
他們使用的是integer
不是Java int
時尚,而是作為“整數類型,而不是浮點或其他類型的”。 Java的long
也是一個整數,它只是一個64位寬的整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.