关于Java里面的短路逻辑运算符
2012-10-18 01:10
197 查看
逻辑运算符执行的是短路求值
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行
比如:
static boolean f1() { System.out.println( "function f1 called." ); return true; }
static boolean f2() { System.out.println( "function f2 called." ); return false; }
if ( false && f1() ) {} // f1不会被调用
if ( true || f2() ){} // f2不会被调用
由于&&要求它的参与操作的两个操作数都是布尔值真,才得真,所以只要得出其中一个为假,那么另一部分的表达式就不会被求值(在上面的例子中是f1()不会被调用)
同理由于||要求它的参与操作的两个操作数只要其中之一为真,就得真,所以只要得出其中一个为真,那么另一部分也不会被求值(在上面的例子中是f2()不会被调用)
这就是逻辑操作符所谓的“短路求值”
位操作没有这一特性,所以不管那边的值是如何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行
比如:
static boolean f1() { System.out.println( "function f1 called." ); return true; }
static boolean f2() { System.out.println( "function f2 called." ); return false; }
if ( false && f1() ) {} // f1不会被调用
if ( true || f2() ){} // f2不会被调用
由于&&要求它的参与操作的两个操作数都是布尔值真,才得真,所以只要得出其中一个为假,那么另一部分的表达式就不会被求值(在上面的例子中是f1()不会被调用)
同理由于||要求它的参与操作的两个操作数只要其中之一为真,就得真,所以只要得出其中一个为真,那么另一部分也不会被求值(在上面的例子中是f2()不会被调用)
这就是逻辑操作符所谓的“短路求值”
位操作没有这一特性,所以不管那边的值是如何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。
相关文章推荐
- 关于java逻辑运算符的短路特性
- java里面 关于参数args
- 关于JS里面写JAVA代码的问题
- java里面关于字符串的=号与equals
- 关于JS里面写JAVA代码的问题
- 关于java在windows里面进程名称问题?
- 关于java里面注解的理解
- 欢迎同学们关注此博客,里面有大量关于java的知识。。。。。。。
- JAVA里面关于byte数组和String之间的转换问题
- Java里面关于数组拷贝的几种方式
- 关于Java里面 == 和 equals
- 深入 JAVA里面关于byte数组和String之间的转换问题
- Java中操作逻辑运算符时进行“短路”测试
- 虚拟机大牛RednaxelaFX关于java里面的静态变量、成员变量、局部变量的内存分配
- Java中的逻辑运算符短路效应
- Java关于短路与&&的巧妙运用
- JAVA里面关于byte数组和String之间的转换问题
- 深入 JAVA里面关于byte数组和String之间的转换问题
- Java里面关于数组拷贝的几种方式
- [原]深入 JAVA里面关于byte数组和String之间的转换问题