【www.gdgbn.com--安卓教程】

asp教程.net 逻辑操作符与(&&),或(||),非(!)

 逻辑操作符与(&&),或(||),非(!)能根据参数的关系返回布尔值

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

              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

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
 
&
 op1 & 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,所以没必要继续计算剩余的表达式,那样只是浪费。“短路“一次正来源于此。实际上,逻辑上所有的逻辑表达式都有一部分不必计算,那将获得性能的提升。

本文来源:http://www.gdgbn.com/shoujikaifa/29207/