- 运算符与优先级
- 赋值运算符
- + - * / % ++ --
- 自增, 自减
- 在前, 先计算, 再赋值
- 在后, 先赋值, 再计算
- 复合运算符
- 自动强制类型转换, 可能会溢出
- 关系运算符
- 逻辑运算符
- & | ^(异或: 左右不一致才为true)
- ! && ||
- 位运算符: 速度快, 因为不用进制转换
- 位与 &
- 位或 |
- 取反 ~
- 异或 ^
- 位移运算符
- >>
- >>>
- <<
- 三元运算符
- 一般有两个候选结果时使用
- 运算符优先级
- && 高于 ||
- 右结合
- 赋值运算符
- 分支语句
- if(){}
- {}可以省略
- 但这样的话, 就不能声明变量
- {}可以省略
- if(){}else{}
- if(){}else if(){}
- if(){}else if(){}else{}
- switch
- case后可以加{}, 缩小变量作用域
- case后需要为字面量, 常量. 不支持拆箱
- default与case相同, 可以写在任意位置
- case中声明的变量, 即使没有执行到这段分支, 以后的case语句也可以使用该变量
- case后无break, 相当于短路或 ||
- jdk1.7后支持String(byte char short int enum)
- 可以用if else替代, 反之则不一定
- if(){}
- 循环语句
- while() {}
- do{}while()
- continue, break
- continue lable; 跳过当前循环, 执行指定循环
- break lable; 跳出指定循环.
- for循环小括号内变量作用域, for循环结束后内存释放
- 扩展
- for(;;){}可以编译通过, 前提: for循环后无代码, 否则为不可到达语句, 编译会报错.
- 注意
- 避免过多嵌套层级
- 至于变量应该在for循环内部还是外部创建, 这是一场圣战!
- 在外面, 变量作用域会变大, 但容易得到for循环结束后变量最终值
- 在里面, 每次声明耗费性能?
- 测了下, 几乎一致
- 可能编译器做了优化
- 结论未知.
- 重点
-
& &&区别, | ||区别
- 推荐用短路与/短路或, 可以提高运算效率
- 快速计算2*8, 12012/16
- 2<<3, 120>>4
-
- 运算符与优先级