布尔数据类型和逻辑运算符
boolean类型的值为true和false,其字面值也只有true和false(也就是不能等同视为0和非零,这一点和C/C++有所不同),且不能和其他数据类型混合运算(包括类型转换)。
Java里面的逻辑运算符分条件逻辑运算符和非条件逻辑运算符:
- &&是条件逻辑运算符,和C/C++中一样,对于A&&B如果求得A已经为flase则不会再求B(即所谓短路);
- & 是非条件逻辑运算符,即使A求值结果为false,B还要求值。
|、||同理。
条件语句
if、else
和C/C++大体相同,唯一区别是 if后面圆括号里必须是求值结果为boolean的表达式。加上前面提到了boolean不能和其他类型互转,因此就不能按C/C++的习惯像下面这样写:
switch
和C/C++大体相同
- switch语句的判断条件expression的计算结果只能是byte, char, short, int,enum等不大于int的类型。
- value1-valueN必须与判断条件expression类型相同,不能用逗号分割且为常量表达式,不能是变量。
- 每个case一个判断值,后面可以跟多条语句,这些语句可以不用大括号括起来。
- 程序将从第一个匹配的case子句处开始执行后面的所有代码(包括后面case子句中的代码)。可以使用break语句跳出switch语句。
- default语句是可选的。当所有case子句条件都不满足时执行。default不一定在最后, 匹配后执行后面的所有代码。
操作符的优先级和结合规则
也差不多
- 括号优先级最高,如果括号有嵌套,内部括号优先执行。
- 如果没有括号,则根据操作符的优先级和结合规则确定执行顺序。
- 如果相邻的操作符有相同的优先级,则根据结合规则确定执行顺序。
- 除赋值运算符之外的二元运算符都是左结合的。
- 赋值运算符和 ? : 运算符是右结合的。
例如:
a+b-c+d 等价于 ((a+b)-c)+d
a=b+=c=5 等价于 a=(b+=(c=5))
操作符的优先级和结合规则只规定了操作符的执行顺序。操作数从左至右进行运算。
二元操作符左边的操作数比右边的操作数优先运算。
例如:
int a = 0; int x = a + (++a); //x的结果为1
int a = 0; int x = (++a) + a; //x的结果为2