1、int类型占用4字节,32位,而long类型占用8字节,64位。3种移位运算符,<<、>>和无符号右移>>>,当左侧操作数为int类型或long类型时,如果右侧操作数大于31或63,系统会做如下处理:
- 若左侧为int,右侧操作数如果是负数先转换成补码,与掩码0x1f做与运算,也就是只有低五位是有效的,然后左侧操作数再移动相应的位数。同理,左侧为long时,是取6位有效。
2、乘除与移位不完全一样。如果不能整除,结果都是向0舍入的,也就是向0的方向取值。具体情况如表:
数值/操作 | 乘以2的n次方与左移n位 | 除以2的n次方与右移n位 |
正数(可以整除) | 相等(无舍入) | 相等(无舍入) |
正数(可以整除) | 相等(无舍入) | 相等(都向下舍入) |
0 | 相等(无舍入) | 相等(无舍入) |
负数(可以整除) | 相等(无舍入) | 相等(无舍入) |
负数(不能整除) | 相等(无舍入) | 相等(相除向上舍入,移位向下舍入) |
3、>>>位无符号右移运算符,其余>>不同的是,>>>是以0来填补左侧移出的空位,而>>是以符号位来填补左侧移出的空位。如果是负数,>>>就可能移出正数值来。
4、一个变量x异或另一个变量y两次,结果的值为x。异或运算可以交换两个变量的值,并且这种方式比相加交换的方式更可取。
- x=x^y; y=x^y; x=x^y
5、有关switch:
- switch表达式可以是byte、short、char、int、Byte、Short、Character、Integer、String或枚举类型。
- case表达式必须是常量表达式或枚举常量名,并且其类型尅赋值给switch表达式类型。
- switch表达式的类型为基本数据类型的包装类型时,将包装类型拆箱为基本数据类型。
- 当switch类型为枚举类型时,会创建一个匿名类来辅助完成。
- 当switch类型为String类型时,将switch语句拆分为两个switch语句,分别为String对象的哈希码及临时变量来辅助完成。