Day8-26.Logical operators
来源:互联网 发布:京东跟淘宝有什么区别 编辑:程序博客网 时间:2024/06/09 21:25
逻辑操作符
逻辑操作符&& 、||、! 能根据参数的逻辑关系,生成一个布尔值(true或false)
//:operators/Bool.java//Relational and logical operators.import java.util.*;import static net.mindview.util.Print.*;public class Bool{public static void main(String [] args){Random rand=new Random(47);int i=rand.nextInt(100);int j=rand.nextInt(100);print(“i=”+i);//58print(“j=”+j);//55print(“i >j is”+ (i > j));//trueprint(“i <j is”+(i<j));//falseprint(“i >=j is”+(i >= j));//trueprint(“i <=j is”+(i <= j));//falseprint(“i ==j is”+(i == j));//falseprint(“i !=j is”+(i != j));//true//Treating an int as a boolean is not legal java://! print(“i && j is ” + ( i && j));//! print(“i || j is ” + ( i || j));//! print(“ !i is ” + !i );print(“(i<10) && (j<10) is” + ((i<10) && (j<10)));//falseprint(“(i<10)|| (j<10) is” + ((i<10) || (j<10)));//false}}///:~
“与”“或”“非”操作只可应用于布尔值。
与在C及C++中不同的是:不可将一个非布尔值当做布尔值在逻辑表达式中使用。
在前面的代码中用“//!”注释掉的语句,就是错误的用法。这种注释语法使得注释能够被自动移除以方便测试。
后面的两个表达式先使用关系比较运算,生成布尔值,然后再对产生的布尔值进行逻辑运算。
注意,如果在应该使用String值得地方使用了布尔值,布尔值会自动转换成适当的文本形式。
在上述程序中,可将整数类型替换成除布尔型以外的其他任何基本数据类型。
但要注意,对浮点数的比较是比较严格的。
即使一个数仅在小数部分与另一个数存在极微小的差异,仍然认为他们是不相等的。
即使一个数之比零大一点点,它仍然是“非零”值。
短路(Short-circuiting)
当使用逻辑操作符时,我们会遇到一种“短路”现象。
即一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分了。
因此,整个逻辑表达式靠后的部分有可能不会被运算。下面是演示短路现象的例子:
//:operators/ShortCircuit.java//Demonstrates short-circuiting behavior//with logical operatorsimport static net.mindview.util.Print.*;public class ShortCircuit{static boolean test1(int val){print(“test1(”+val+”)”);//test1(0)print(“result:”+(val<1));result:truereturn val<1;}static boolean test2(int val){print(“test2(”+val+”)”);//test2(2)print(“result:”+(val<2));//falsereturn val<1;}static boolean test3(int val){print(“test3(”+val+”)”);print(“result:”+(val<3));return val<1;}public static void main(String [] args){boolean b=test1(0) && test2(2) && test3(2);print(“expression is” +b);//expression is false}}///:~
每个测试都会比较参数,并返回true或false。
它也会打印信息告诉你正在条用测试,这些测试都作用与下面这个表达式:
test1(0) && test2(2) && test3(2)
你会很自然地认为所有这三个测试都会得以执行。
但输出显示并非这样。第一个测试生成true,所以表达式计算会继续下去。
然而,第二个测试产生了一个false结果。
由于这意味着整个表达式肯定为false,所以没必要继续计算剩余的表达式,那样只是浪费
“短路”一词的由来正源于此。
事实上,如果所有的逻辑表达式都有一部分不必计算,那将获得潜在的性能提升。
- Day8-26.Logical operators
- Day8-25.Relational operators
- 14.10 Logical operators
- 14.11 Conditional logical operators
- 14.11 Conditional logical operators
- 4.2.2 - Logical and/or Operators
- day8
- DAY8
- Day8
- DAY8
- Day8
- day8
- Day8
- matlab2014a中help与参考页翻译 Logical Operators: Short-Circuit && ||
- Operators
- Operators
- Operators
- Operators
- 配置ssm项目报错:No qualifying bean of type ... found for dependency ...expected at least 1 bean which
- 《程序员的修炼之道》笔记——3、石头汤与煮青蛙
- android开发---平板开发中横竖屏的一些总结
- 输出回形数组
- 电源学习
- Day8-26.Logical operators
- 阿里云Sophix 3.0版本热更新快速入门
- Card Flip Animations的实现
- MySQL的lock tables和unlock tables的用法
- (转)记录CentOS6升级glibc库过程(glibc2.14)
- 检测ScrollView开始停止滑动的方案
- 简单有向图(c++版)
- Guess (浮点数,高精度)
- 常用的正则表达式