黑马程序员技术交流社区

标题: &和&&的区别。 [打印本页]

作者: 王德云    时间: 2011-11-11 21:23
标题: &和&&的区别。
本帖最后由 wangdeyun 于 2011-11-11 22:25 编辑

&和&&的区别是什么?求详细解答!
作者: 宋文轩    时间: 2011-11-11 21:27
A &  B:无论前后是真是假 两个语句都会被访问到。
A &&B:  如果A为假,那么B就不被访问,直接判断该句结果为假。 也叫短路与。 但如果A为假,则B也会被访问到。

同样的 A | B :无论A B 真假,A B 都会被访问到。
       A||B: 如果A为真,则B不被访问,直接判断该句为真。
作者: 王德云    时间: 2011-11-11 21:31
宋文轩 发表于 2011-11-11 21:27
A &  B:无论前后是真是假 两个语句都会被访问到。
A &&B:  如果A为假,那么B就不被访问,直接判断该句结果 ...

&是用来做什么的,不会用来做比较的吧?
作者: 宋文轩    时间: 2011-11-11 21:36
wangdeyun 发表于 2011-11-11 21:31
&是用来做什么的,不会用来做比较的吧?

&是逻辑运算符。&符号两边表达式都为真 则结果为真,如果有一边为假,结果就为假。

基本是用来判断用的。
作者: 王德云    时间: 2011-11-11 22:13
宋文轩 发表于 2011-11-11 21:36
&是逻辑运算符。&符号两边表达式都为真 则结果为真,如果有一边为假,结果就为假。

基本是用来判断用的 ...

谢谢解答,&不是逻辑运算符!
作者: 王新春    时间: 2011-11-11 22:19
&和&&都是逻辑运算符,主要区别是在于后面的&&是短路的,
也就是说当使用&时,要是&前面的表达式的结果是true,后面的条件也是true时结果才是真
要是&前面的表达式的结果是true,后面的条件是false时结果是假,
要是&前面的表达式的结果是false,后面的条件是true时结果是假,
要是&前面的表达式的结果是false,后面的条件是false时结果是假,
&前后表达式的结果都要去判断。

但是使用&&时是只要前面的表达式的结果是false,则后面的表达式的结果就不用去判断了,结果就是false,
当前面的表达式的结果是true时,才去判断后面的表达式的结果若是false,结果就是false
若是true,则结果就是true。相对来说比&得效率要高一些。
作者: 王德云    时间: 2011-11-11 22:26
王新春 发表于 2011-11-11 22:19
&和&&都是逻辑运算符,主要区别是在于后面的&&是短路的,
也就是说当使用&时,要是&前面的表达式的结果是tr ...

&应该是位运算符吧,表示按位与运算
作者: 胡威    时间: 2011-11-12 00:24
写的有点多,不过看完之后,你一定会完全明白。
毕老师的视频中对于& | ^ 讲的比较简单,便于应用。要是详细分类的话,我特意翻阅了几本清华大学出版社的java编程书,是这样的,你不能单独说& | ^ 是逻辑运算符还是位运算符,要看运用的环境,&既可以是你说的位运算符之按位与运算,也可以是逻辑运算符。
逻辑运算符:
用于执行布尔值的逻辑运算,也就是用逻辑运算符连接的表达式1和表达式2各自的结果要么为真要么为假,根据两个表达式各自的真假和&最终确定最后结果为真还是假  即 表达式1 & 表达式2  如3>5 & 3<7 为false & true 结果为false,在这里&就是个逻辑运算符。

位运算符:
这里的位指的是二进制的一个位;
位运算符包括:基本位运算符(& | ^ ~ 等等)和移动位运算符(>> >>> << <<<等等)
基本运算符中& | ^ ~ 也统称位逻辑运算符,也就是说是对二进制位进行运算,同时运算也包含了逻辑运算
举例:50 & 15 (看见没这里的&前后不是表达式1和表达式2了 变成了两个整数)
     在计算机中都是以二进制的形式表现得 就变成了  00110010
                                                                        & 00001111
                                                                        = 00000010
可以看出都是对50,15的对应的二进制位分别进行运算,在运算中又用到了与逻辑运算,因此叫做位逻辑运算符,具体到&来说就是按位与运算符,同理| 叫做按位或运算。
移位运算符:顾名思义,通过对整数的二进制位进行左右移动进行运算。这个就不用我说啦
作者: 宿万涛    时间: 2011-11-12 01:17
“&”与“&&”区别在于:如果使用前者,那么无论任何情况,“&”两边的表达式都会参与计算,如果使用后者,当“&&”的左边为false时,则将不会计算其右边的表达式。
作者: 史晓霞    时间: 2011-11-12 09:05
&即可做逻辑运算符,也可以做位运算符,它做逻辑运算符是和&&有点区别,&&左边为false,右边就不会看了,而&不管左边是false还是true,右边都执行,所以它在用&逻辑运算时,容易出现NullPointerException异常)
作者: 泼孩    时间: 2011-11-12 11:46
本帖最后由 泼孩 于 2011-11-16 23:26 编辑

&与&&都是逻辑运算符,用于连接boolean类型表达式。
&: (AND)与运算符,只要两边的boolean表达式结果有一个为false,结果为false,两边都为true,结果为true
&&: (AND)短路。
区别:
&:无论左边是true是false,右边都运算。
&&:当左边为false,右边不运算。        




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2