一、基础
对于一个区间的判断是十分常见的需求,比如需要判断a
是否在区间[1,9]
中。
正确的判断方式是
if (a >=1 && a<=9){
// 进入此处即是[1,9]之间
}
这里容易出现一种常见的思维误区:直接使用连续不等式判断
if (1<= a <=9){
// 这样的判断是错误的
}
为什么使用连续不等式不能正确的判断呢?这是因为和计算机执行的过程有关系,在执行1<= a <=9
时并不是直接进行的两次判断(1 <= a和 a <= 9),而是先执行1 <= a
,然后拿这个结果去和<= 9
进行比较 ,很多编程语言中1 <= a
得到的结果是true
或者 false
。
那么在执行true <= 9
会发生什么? 这两个是不同的数据类型,判断的时候会自动进行类型转换(隐式类型转换),很多编程语言是将true
转换为1
,false
转换为0
,那么整个连续不等式判断结果就是 1 <= 9 或者 0 <= 9 的结果,由此可见,1 <= a <= 9
的执行结果永远都是true
,并非预期结果
二、进阶
除隐式数据类型转换,在逻辑判断符 &&
和 ||
中还有一个短路
特性,即执行到达成结果的最小单元后不再进行后续代码运算。
例如 A && B , A、B可以是任何返回true\false的表达式。如果A的到的结果是false, A && B 的结果就已经可以确定为false,此时,就不会去执行B。同理,如果在 A || B 中 A的值是true, 那么结果也可以确定为true,此时就不会去执行B。
这样的短路特性可以简化代码的书写,但是同时也降低了代码的可阅读性,甚至执行到一些非预期结果。
网友评论