ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## Java编程那些事儿23—逻辑运算符 郑州游戏学院 陈跃峰 出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb) **4.3 逻辑运算符** 逻辑运算符是指进行逻辑运算的符号。逻辑运算主要包括与(and)、或(or)和非(not)三种,在程序中主要用来连接多个条件,从而形成更加复杂的条件。 逻辑运算符的运算结果是boolean类型。 参与逻辑运算的数据也必须是boolean类型。 关于逻辑运算符的种类和说明参看表4-3。 表4-3 逻辑运算符 <table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: -3.95pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 33.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="45"> <div align="center">符号</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 55.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="74"> <div align="center">名称</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 215.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="287"> <div align="center">功能说明</div> </td> </tr><tr><td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 33.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="45"> <div align="center">&amp;&amp;</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 55.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="74"> <div align="center">逻辑与</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 215.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="287"> <div align="center">两个条件同时为true才为true,否则为false</div> </td> </tr><tr><td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 33.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="45"> <div align="center">||</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 55.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="74"> <div align="center">逻辑或</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 215.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="287"> <div align="center">两个条件有一个为true则为true,否则为false</div> </td> </tr><tr><td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 33.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="45"> <div align="center">!</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 55.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="74"> <div align="center">逻辑非</div> </td> <td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 215.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" valign="top" width="287"> <div align="center">只操作一个数据,对数据取反</div> </td> </tr></tbody></table> 逻辑运算符使用示例代码: ~~~                    boolean b1 = true;                    boolean b2 = false;                    boolean b3 = b1 && b2; //则b3的值是false                    b3 = b1 || b2;        //则b3的值是true                    b3 = !b1;           //则b3的值是false ~~~ 在实际程序中,可以根据逻辑的需要使用对应的逻辑运算符号。实际使用示例: 1. 表示变量n是否属于[0,10)区间 ~~~ int n = 4;                             boolean b = (n >=0) && (n < 10); ~~~ 对于变量n来说,只要n同时满足大于等于零,且小于10,则位于[0,10)区间,由于程序中无法书写0<=n<10这样的条件,则必须通过逻辑运算符进行连接。 2. 表示变量n不属于[0,10)区间 一种写法是: ~~~          int n = 4;          boolean b = !((n >= 0) && (n < 10)); ~~~ 这里,对于属于该区间的条件取反,则可以获得不属于该区间的条件。 另一种写法是: ~~~          int n = 4;          boolean b = (n < 0) || (n >= 10); ~~~ 这里做了一个简单的变通,如果变量n不属于该区间,则在数学上只需要满足n小于0或者n大于等于10的任何一个条件即可,这样的或者关系在程序中实现时使用逻辑或实现。 在程序设计中,根据逻辑需要,使用对应的逻辑运算符,可以实现相对比较复杂的组合条件,从而实现对应程序的功能。 最后说一下&&和&的区别,其实在进行逻辑与运算时,既可以使用&&也可以使用&,在功能上本身没有区别。两者区别的位置在,对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。 示例代码: ~~~                    int n = -1;                    boolean b1 = (n >= 0) && (n < 10);                    boolean b2 = (n >= 0) & (n < 10); ~~~ 则对于第二行代码来说,两个条件都将被计算,而对于第三行代码来说,因为n >= 0这个条件不成立,则n < 10根本不会被执行。当然,两者得到的最终结果是一样的。 对于现在的代码来说,区别不大,但是如果后续的条件是一个方法(方法的概念后续将介绍到),则将影响程序逻辑。 验证&和&&功能的示例代码如下: ~~~                    public class Test{                             public static void main(String[] args){                                       int n = 10;                                       boolean b = (n < 8) && ((n = 1) != 0);                                       int m = 20;                                       boolean b1 = (m < 8) & ((m = 1) != 0);                                         System.out.println(n);                                       System.out.println(m);                             } } ~~~ 最后编辑:2008-5-26 修正&和&&的错误