文章目录
- 1.关系操作符
- 2.逻辑操作符
- 3.if语句
- 3.1常见的问题
- 3.2 两个浮点数值的相等测试
- 3.3 简化布尔赋值
- 4.switch语句
- 5.三元操作符
1.关系操作符
Java 提供六种关系操作符(relational operator)(也称为比较操作符(comparison operator))
操作符 | 名称 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
比较的结果是一个布尔值:true(真)或false(假)。
保存布尔值的变量称为布尔变量(boolean variable),boolean数据类型用于声明布尔型变量。
boolean型变量可以是以下这两个值中的一个:true和false。
true 和fa1se 都是字面值,就像10这样的数字一样。它们被当作保留字一样,不能用做程序中的标识符。
boolean a = true;
boolean b = false;
2.逻辑操作符
有时候,是否执行一条语句是由几个条件的组合来决定的。可以使用逻辑操作符组合这些条件。
逻辑操作符(logical operator)也称为布尔操作符(boolean operator),是对布尔值进行的运算,它会创建新的布尔值。
操作符 | 名称 |
---|---|
! | 非 |
&& | 与 |
|| | 或 |
^ | 异或 |
运算符执行顺序
如果优先级相同的操作符相邻,则结合规则(associativity)决定它们的执行顺序。赋值操作符是右结合的(right-associative)。其他二元操作符都是左结合的(left-associative)。
3.if语句
// if - else if - else结构
if(score >=90)
System.out("厉害");
else if(score >=80)
System.out("好");
else if(score >=60)
System.out("ok");
else{
// 嵌套if
if(isHardworking)
System.out("没关系");
else
System.out("hehe");
}
3.1常见的问题
/*冗余的条件*/
if(a==true){};
// 应该用下面这个:
if(a){};
/*错误使用赋值语句*/
if(a=true){}; // 先赋值再判断,所以永远是true
3.2 两个浮点数值的相等测试
浮点数具有有限的计算精度;涉及浮点数的计算可能引人舍人错误。因此,两个浮点数值的相等测试并不可靠。
doublex=1.0-0.1-0.1-0.1-0.1-0.1;
System.out.printin(x==0.5);
//这里,x并不是精确等于0.5,而是0.5000000000000001。
虽然不能依赖于两个浮点这里,x并不是精确等于0.5,而是0.5000000000000001。可以通过测试两个数的差距小于某个阈值,来比较它们是否已经足够接近。也就是,对于一个非常小的值ε,如果|x-y<ε,那么x和y非常接近。
通常,将ε设为10-14来比较两个double类型的值,而设为10-7来比较两个float类型的值。
final double EPSILON = 1E-14;
double x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
if(Math.abs(x - 0.5) < EPSILON)
System.out.printin(x+"is approximately 0.5");
3.3 简化布尔赋值
boolean even;
if (number % 2 == 0)
even = true;
else
even = false;
// 应该简化为:
boolean even = (number % 2 == 0)
4.switch语句
switch(status){
case 0:{};
break;
case 1:{};
break;
case 2:{};
break;
default:{};
}
- switch 表达式必须能计算出一个 char、byte、short、int或者 String型值,并且必须用括号括住
- case后面都是常量表达式
- 当 switch 表达式的值与 case语句的值相匹配时,执行从该 case 开始的语句,直到遇到一个break语句或到达该switch语句的结束。break是可选的。break语句会立即终止 switch 语句。
- 默认情况(defau1t)是可选的,当没有一个给出的case与switch 表达式匹配时
则执行该操作。
// 落空行为(fall-through behavior)
switch (day){
case 1:
case 2:
case 3:
case 4:
case 5: System.out.println("Weekday");break;
case 6:
case 0: System.out.println("Weekday");break;
}
5.三元操作符
// y是a b中的最大值
int y = (a > b) ? a : b;