1. 基本数据类型
- 注意事项1
1
2byte i = 5;
i = i + 5;
上述代码示例编译时会报错,因为语句i = i +5;中右边的5是int类型值,所以 i + 5也是int类型值。可以写成如下形式:
1 | byet i = 5; |
i += 5;相当于语句i = (byte)(i + 5);。其在底层默认会进行类型转换。
- 注意事项2
1
2byte i = 127;
i += 1;
运行上述代码之后输出的结果是-128。
这是因为byte类型的127在计算机底层是表示形式是01111111。加1之后则变为10000000,也就是-128。
- 注意事项3
长整型的值有一个后缀L或l,比如:
1 | long i = 1554555L; |
float类型的值有一个后缀F或f,比如:
1 | float i = 3.14F; |
当然可以在浮点数值后面加上后缀D或d以表示是double类型数值。
- 注意事项4
整型值可以用前缀0x或0X表示其是十六进制值。
从Java 7开始,整型值可以用前缀0b或0B表示其是二进制值,还可以在数字字面加下划线,更容易理解。比如:
1 | int i = 1_000_000; //表示十进制的一百万 |
2. <<、>>与>>>
数值的二进制值的位移。在与2的倍数进行数值运算时,位移运算比传统的乘法运算速度要快。
<<(左移):左移几位其实就是该数据乘以2的几次方。<<可以完成2的次幂运算。比如:
1 | 3 << 2 = 12 --> 3 * 2^2 = 12 |
>> (右移):右移几位其实就是该数据除以2的几次幂。右移后对于高位出现的空位,原来高位是什么就用什么补这个空位。比如:
1 | 6 >> 1 = 3 --> 6 / 2 = 3 |
>>> (无符号右移):数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
3. &与&&
& 运算符有两种用法: (1)按位与; (2)逻辑与。
1 | 按位与: |
&& 运算符是 短路与运算。
1 | boolean i = flase; |
4. break
面临需要跳出嵌套循环的情况时,break语句可以跳出指定的循环,可以通过标号来完成。但是就像要避免使用 goto 一样,应该避免使用带标签的 break。
1 | A:for (int x = 0; x<3; x++) { |
5. continue
continue可以提前结束循环,继续下次循环(可以通过标号指定某一循环)。同样应该避免使用带标签的continue。
1 | A:for (int x = 0; x<3; x++) { |
注意:事实上,可以将标签应用到任何语句中,甚至可以应用到 if 语句或者块语句中,示例代码如下:
1 | int i = 10; |
6. switch
支持数据类型:
- char、byte、short或int的常量表达式
- 枚举常量
- 从Java SE 7开始,case标签还可以是字符串字面量
与if语句的比较:
if语句:
- 对具体的值进行判断
- 对区间进行判断
- 对运算结果是boolean类型的表达式进行判断
switch语句:
- 对具体的值进行判断(对于几个固定值的判断,建议使用switch语句,因为switch语句会将具体的要判断的值都加载进内存中,效率相对高一些)
- 值的个数通常是固定的