Java 移位运算符-操作数必须可转换为整数基元?

Java 移位运算符-操作数必须可转换为整数基元?,java,java-8,bit-shift,Java,Java 8,Bit Shift,我正在准备Java考试,我正在阅读“OCA Java SE 8程序员学习指南(考试1Z0-808)”。在操作员部分,我发现了这句话: 移位运算符:移位运算符接受两个类型必须为的操作数 可转换为整数原语 我觉得很奇怪,所以我用long: public class HelloWorld{ public static void main(String []args){ long test = 3147483647L; System.out.println

我正在准备Java考试,我正在阅读“OCA Java SE 8程序员学习指南(考试1Z0-808)”。在操作员部分,我发现了这句话:

移位运算符:移位运算符接受两个类型必须为的操作数 可转换为整数原语

我觉得很奇怪,所以我用long:

public class HelloWorld{

     public static void main(String []args){
         long test = 3147483647L;
         System.out.println(test << 1);

     }
}
公共类HelloWorld{
公共静态void main(字符串[]args){
长试验=3147483647L;

System.out.println(test他们使用的不是Java
int
方式的
integer
,而是“整数类型而不是浮点或其他类型”。Java的
long
也是一个整数,它只是一个64位宽的整数。

移位运算符
JLS将整数类型定义为“数字类型是整数类型byte、short、int、long和char,…”,对于移位运算符,“如果移位运算符的每个操作数的类型在一元数字提升后不是基元整数类型,则是编译时错误。”