逻辑操作符与(&&),或(||),非(!)能根据参数的关系返回布尔值
public class bool{
public static void main(string [] args){
random rand=new random(47);
int i=rand.nextint(100);
int j=rand.nextint(100);
system.out.println(“i=” + i);
system.out.println(“j=” + j);
system.out.println(“i > j is” +( i>j));
system.out.println(“i < j is” +( i<j));
system.out.println(“i > =j is” +( i>=j));
system.out.println(“i <=j is” +( i<=j));
system.out.println(“i ==j is” +( i==j));
system.out.println(“i !=j is” +( i!=j));
system.out.println(“(i <10) && (j<10) is” +((i <10) && (j<10)));
system.out.println(“(i <10) || (j<10) is” +((i <10) ||(j<10)));
}
}
输出
i=58
j=55
i>j is true
i<j is false
i>= j is true
i<=j is false
i==j is false
i!=j is true
(i <10) && (j<10) is false
(i <10) ||(j<10) isfalse
与或非操作只能应用于布尔值,如果在应该是string值的地方使用了boolean的话,布尔值会自动转换成适当的形式。
应注意的是在程序上对浮点数的比较是非常严格的。
条件操作符
operator
use
description
&&
op1 && op2
当op1和op2都是true时,返回true ;如果op1的值是false,则不运算右边的操作数
||
op1 || op2
当op1和op2有一个是true时,返回true;如果op1的值是true,则不运算右边的操作数
!
! op
当op是false时,返回true;当op是true时,返回false
&
op(www.111cn.net)1 & op2
运算op1和op2;如果op1和op2都是布尔值,而且都等于true,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位与操作
|
op1 | op2
运算op1和op2;如果op1和op2都是布尔值,而且有一个等于true,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位或操作
^
op1 ^ op2
运算op1和op2;如果op1和op2不同,即如果有一个是true,另一个不是,那么返回true,否则返回false;如果op1和op2都是数字,那么执行位异或操作
短路
当使用逻辑操作符的时候会遇到一种短路状况。既一但能够明确无误地确定整个表达式的值,就不再计算表达式余下的部分了。因此,整个逻辑表达式靠后的部分有可能不再计算。下面的例子展示了短路现象
public class shortcircuit{
static boolean test1(int val){
system.out.println(“test1(“+val+”)”);
system.out.println(“result:”+(val<1));
return val<1
}
static boolean test2(int val){
system.out.println(“test1(“+val+”)”);
system.out.println(“result:”+(val<2));
return val<2
}
static boolean test3(int val){
system.out.println(“test1(“+val+”)”);
system.out.println(“result:”+(val<3));
return val<3
}
public static void main(string [] args){
boolean b=test1(0)&&test2(2)&&test3(2);
system.out.println(“expression is “ + b);
}
}
输出
test1(0)
result:true
test(2)
result:false
expression is false
由于调用了3个方法你会很自然的觉得3个方法应该都被运行,但实际上输出并非这样,因为在第二次测试产生一个false结果。由于这意味着整个表达式肯定为false,所以没必要继续计算剩余的表达式,那样只是浪费。“短路“一次正来源于此。实际上,逻辑上所有的逻辑表达式都有一部分不必计算,那将获得性能的提升。
from:http://www.111cn.net/net/net/37363.htm