运算系统
% 取余
5 % 2 = 1
-5 % 2 = -1
// 判断一个整数是不是奇数
public static boolean isOdd (int number) {
// return number % 2 == 1; // 没有考虑负值的情况
return number % 2 != 0;
}
public static boolean isOdd (int number) {
return number & 1;
}
位运算
按位取反 ~
1's complement => 反码
~3 == -4
补码
2's complement => 补码 = 按位取反之后 +1 => 使用补码来表示相应的负数
可以使用相同的硬件电路同时表示 + 和 - => 4 的补码就是 -4 => 计算机中 4 -> -4
4 => 00000100
// 1. 按位取反 => 11111011
// 2. +1 得到 -4
-4 => 11111100
亦或 ^
不进位的加法
x ^ x == 0;
x ^ 0 == x;
左移 <<
z 进制中的 x << y
=> x * (z ^ y)
5 << 1 == 10; // 5 * (2 ^ 1)
5 << 2 == 20; // 5 * (2 ^ 2)
5 << 3 == 40; // 5 * (2 ^ 3)
右移 >>
z 进制中的 x >> y
=> (x >= z ^ y) ? (x / (z ^ y)) : 0
-
>>
=> 带符号右移 -
>>>
=> 无符号右移
-4 // 11111011
-4 >> 1 == -2 // 符号位补之前的符号,缺位补 0 -> 11111101 -> 00000010 == 2
-4 >>> 1 // 缺位补 0 -> 01111101
作用
- 掩码 -> 设置使用
|
,读取使用&
- 清除 A 位 ->
Flag & (~A)
运算符优先级
- 乘除高于加减
- 其他全部加括号
控制流
for & for each 循环
任何接口实现了 Iterable
就是可以使用 for each
循环访问其中的元素
break & continue
-
break;
=> 立即结束包裹当前 break 的第一层循环 -
continue;
=> 跳过包裹当前 continue 的第一层循环中的其余语句,继续下一次循环 -
break label;
=> break 出带有 label 的循环// 标志符: == label 最外层的循环: for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { break 最外层的循环; // 直接 break 出最外层的循环 } }
switch
switch
具有穿透性。哪些东西可以 switch
-
int
|long
|char
|byte
|short
enum
-
String
=> JDK7+
知识点
- 字符串中的 +
- String 不可变
-
StringBuilder
-> 在一块内存上面不停的连接新的东西,可以避免频繁的创建零碎的不可变的 String 对象带来的内存开销 - 使用字符串的 + 时 -> 引用数据类型会调用
toString()
方法,原生数据类型会使用对应的表示 - 当连接一个很长的字符串 + 时 -> JDK 内部会自动的转换成
StringBuilder
调用,以减轻内存开销,提高性能
网友评论