java提供了三种逻辑运算符:&&与、||或、!非。其只能操作布尔型表达式,如:
package com.anjoyo.day01.test;
public class Test {
public static void main(String[] args){
System.out.println("****** && ******");
System.out.println(true&&true);// true
System.out.println(true&&false);// false
System.out.println(false&&true);// false
System.out.println(false&&false);// false
System.out.println("****** || ******");
System.out.println(true||true);// true
System.out.println(true||false);// true
System.out.println(false||true);// true
System.out.println(false||false);// false
System.out.println("****** ! ******");
System.out.println(!true);// false
System.out.println(!false);// true
}
}
以上测试结果总结如下:
对于&&(与)来说,当且仅当操作符两边的布尔表达式都为true时才为true
对于||(或)来说,操作符两边任一表达式结果为true,整个表达式就为true
对于!(非)来说,就是对后跟的布尔表达式的结果取反。
java提供了4种位运算符:&与、|或、^异或、~按位取反,其中&与、|或、^异或,可以操作数值型,也可以操作布尔表达式:操作布尔表达式如下:
package com.anjoyo.day01.test;
public class Test {
public static void main(String[] args){
System.out.println("****** & ******");
System.out.println(true&true);// true
System.out.println(true&false);// false
System.out.println(false&true);// false
System.out.println(false&false);// false
System.out.println("****** | ******");
System.out.println(true|true);// true
System.out.println(true|false);// true
System.out.println(false|true);// true
System.out.println(false|false);// false
System.out.println("****** ^ ******");
System.out.println(true^true);// false
System.out.println(true^false);// true
System.out.println(false^true);// true
System.out.println(false^false);// false
}
}
对于以上测试程序,&和|就不再多说,^异或的结果可以总结为:如果^两边的布尔表达式的结果一致,则为false,如果不一致,则为false。
在做布尔表达式的运算时,逻辑运算和位运算的区别在于位运算不会产生短路:
package com.anjoyo.day01.test;
public class Test {
public static void main(String[] args){
int i = 1;
int j = 2;
// i>0为true,此时结果肯定是true,i>j++没有执行
System.out.println(i>0 || i>j++);// true
System.out.println(i);// 1
System.out.println(j);// 2
// i>0为true,此时结果肯定是true,但是i>j++执行了
System.out.println(i>0 | i>j++);// true
System.out.println(i);// 1
System.out.println(j);// 3
// i<0为false,此时结果肯定是false,i>j++没有执行
System.out.println(i<0 && i>j++);// false
System.out.println(i);// 1
System.out.println(j);// 3
// i<0为false,此时结果肯定是false,但是i>j++执行了
System.out.println(i<0 & i>j++);// false
System.out.println(i);// 1
System.out.println(j);// 4
}
}
一般来讲,逻辑运算符用于操作布尔表达式,位运算符我们一般用来操作数值型:即操作int型和char型数据:
package com.anjoyo.day01.test;
public class Test {
public static void main(String[] args){
// 0001 & 0010 --> 0000
System.out.println(1&2);// 0
// 0001 | 0010 --> 0011
System.out.println(1|2);// 3
// 0001 ^ 0010 --> 0011
System.out.println(1^2);// 3
// ~0010 --> 1101
System.out.println(~2);// -3
}
}