今天我们继续Java中操作符的相关知识,主要涉及两块的内容:
逻辑操作符
按位操作符
逻辑操作符
逻辑操作符负责连接多个关系表达式,其能根据参数的逻辑关系,生成一个boolean值。逻辑操作符有与(&&)
、或(||)
、非(!)
。“与”、“或”、“非”只能应用于boolean值,而不能将一个非布尔值当作布尔值在逻辑表达式中使用。
&&
操作符表示所有的关系表达式都为true时才为true||
操作符表示只要有一个关系表达式为true就为true!
操作符表示取当前的相反量逻辑操作符混合使用时,可以使用括号
()
来确定优先级
public class LogicExp { public static void main(String [] args) { //&& 所有的关系表达式都为true时才为true System.out.println(5>3&&5>4); System.out.println(5>3&&5>6); //|| 只要有一个关系表达式为true就为true System.out.println(5>3||5>4); System.out.println(5>3||5>6); //! 取当前的相反量 System.out.println(5>3); System.out.println(!(5>3)); //混合使用逻辑操作符()内的表达式优先进行运算 System.out.println((5>6&&5>3) || 5>4); System.out.println(5>6 && (5>3||5>4)); } }//output//true//false//true//true//true//false//true//false
&&
、||
操作符往往还有短路的作用,短路的作用体现在:比如说&&
操作符,如果第一个表达式为false,那么它便不会去对第二个表达式进行运算
。||
操作符具有同样的特性,如果第一个表达式为true,那么它便不会去对第二个表达式进行运算
。
public class LogicExp { public static void main(String [] args) { System.out.println("&&短路操作:"+(test3()&&test1())); System.out.println("====================================") System.out.println("||短路操作:"+(test1()||test2())); } public static test1() { System.out.println("5>3:"+(5>3)); return (5>3); } public static test2() { System.out.println("5>4:"+(5>4)); return (5>4); } public static test3() { System.out.println("5>6:"+(5>6)); return (5>6); } }//output//5>6:false//&&短路操作:false//====================================//5>3:true//||短路操作:true
因此在写逻辑表达式的时候,把重要判断的条件表达式放在前面优先判断,可以减少不必要的运算,从而获得潜在的性能提升。
按位操作符
除了Java中的八种基本数据类型外,还有一个比这些基本数据类型还小的单位bit(位)
,如1 byte = 8 bit
。按位操作符就是对这个二进制位进行操作。按位操作符会对两个参数中对应的位执行布尔(boolean)代数运算(因为二进制位只可能为0或者为1),并生成一个boolean结果。
按位操作符主要分为&(按位与)
、|(按位或)
、^(按位异或)
、~(非)
四种。
&(按位与):如果两个输入为都是1,则生成1,否则生成0。
假设输入值的二进制数是下列的输入值1和输入值2输入值1:00011010输入值2:00110011=> 比较后的结果是:00010010
|(按位或):只要两个输入位有一个为1,则生成1;只有两个输入位都是0的情况下才会生成0。
假设输入值的二进制数是下列的输入值1和输入值2输入值1:00011010输入值2:00110011=> 比较后的结果是:00111011
^(按位异或):如果两个输出位有且只有一个为1,则生成1,否则生成0.
假设输入值的二进制数是下列的输入值1和输入值2输入值1:00011010输入值2:00110011=> 比较后的结果是:00101001
~(非):属于一元操作符,只对一个操作数进行操作,取其相反值。如0的相反值是1。
假设输入值的二进制数是下列的输入值1输入值1:00011010=> 取反后的结果是:11100101
对于boolean值而言,由于其作为一种单bit值,按位操作符具有与逻辑操作符相同的效果,只是其没有逻辑操作符的短路功能
。
每日一结
今天主要讲解了逻辑操作符和按位操作符,对boolean类型而言,两种操作符具有大致相同的逻辑判断效果,但是也有一定的区别,这是我们需要谨记的地方。
而在使用逻辑操作符时,一定要记得,把优先级高的、更顶层的关系表达式放在前面,这样能够避免不必要的运算,从而一定程度上提高程序性能。
作者:Lurker潜行者
原文出处:https://www.cnblogs.com/lurker-yaojiang/p/10488895.html