A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 小河北 中级黑马   /  2015-11-21 23:46  /  1817 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小河北 于 2015-12-8 23:50 编辑

&&:短路与,有短路效应,前边出现false,后边不执行。
&:逻辑与,无论前边是false还是true,后边都会执行。
               
但他们的运行结果是一样的。希望此帖能够帮助像我一样的菜鸟们吧!类似的还有 | 和 ||

23 个回复

正序浏览
&是位操作符,单符号。a&b 是a与b的运行 && 并且的意思,a==0&&b==0.
回复 使用道具 举报
wyasln 中级黑马 2015-11-26 19:49:25
23#
有些时候不一样,比如
if(2>4 & c<d++){};System.out.println(d);
if(2>4 && c<d++){};System.out.println(d);
这时候输出的d就不一样了,一个执行了d++,一个没有执行
回复 使用道具 举报
主要是节省资源,提升效率
回复 使用道具 举报
anuo 中级黑马 2015-11-26 09:27:38
21#
&不管左边是true还是false,右边都要运算。&&反之,后面不运算。很多情况下,对结果没有影响。但在后期中,对于算法的优化是有一定作用的。|和||是一样的
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 00:43
肯定是不一样的,你看一下这段程序
class Test {
        public static void main(String[] args) {

这个示例给力,理解了
回复 使用道具 举报
很赞 这个东西记得不是很清楚 现在又复习巩固了下  
回复 使用道具 举报
oup 中级黑马 2015-11-25 23:33:39
18#
好多大神出没
回复 使用道具 举报
白羽蘇芳 发表于 2015-11-25 10:21
为啥if判断后,不会把8和10赋值给abij呢

if (a++ > 5 & b++ > 6){....}中, a++ > 5    是  alse,  b++ > 6  也是false,因此()是false ,不再执行{}中的内容,但因为执行了 a++ > 5、 b++ > 6,a和b都会在逻辑运算结束后自加1,即最后输出时a = 6 , b = 7。
if (i++ > 5 && j++ > 6){ ... }中,&&是有短路功能,即左边为false的情况下就直接判定()为false了(&需要两边判定后才判定()),右边不再执行(同理 || 在左边为true时不再执行右边进行判断),因此在判断 i++>5为false后,i 会自加1,但右边的 j++ > 6 不执行,因此 j 还是保持原值

回复 使用道具 举报
知识都是一点一点积攒的。。
回复 使用道具 举报
不过还是复习了一下,差不多都忘了
回复 使用道具 举报
学习了。
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 01:03
这个主要是要看仔细,在&& 和||时一定要把前后分开看,前边为false时,后边的就一步也不执行,最好就不要 ...

为啥if判断后,不会把8和10赋值给abij呢
回复 使用道具 举报
小河北 发表于 2015-11-25 00:06
谢谢哥们!我再仔细研究一些

{:2_36:}   
回复 使用道具 举报
萧未然 发表于 2015-11-22 23:20
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
if(expression1 & expression2){}
中ex ...

谢谢哥们!我再仔细研究一些
回复 使用道具 举报
小河北 发表于 2015-11-22 23:02
你说的欠佳,
     位运算符中包含    :  &、|,~、^、>>、>>>、

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
if(expression1 & expression2){}
中expression1 和expression2 无论expression1返回true还是false,都会继续判断expression2的返回值
if(expression1 && expression2){}
中如果expression1 返回false,那么expression2 不执行,跳出if语句,
   如果expression1 返回true,继续判断expression2
不管&作为逻辑运算符还是位运算符,其实它本身的意义并没有变,就好像,你自己,今天待在北京,明天待在上海一样,而且,数字中的0、1不刚好对应true、false么
回复 使用道具 举报
萧未然 发表于 2015-11-22 14:46
&是位运算符,&&是逻辑运算符

你说的欠佳,
     位运算符中包含    :  &、|,~、^、>>、>>>、<<;调用位运算符的都是数值型数据
    逻辑运算符中包含  :  &、|、!、^、&&、|、||、!;调用逻辑运算符的都是条件表达式(逻辑表达式两侧应该是boolean数据)
怎么区分位运算符中与逻辑运算符中相同的符号,是个难点
回复 使用道具 举报
&是位运算符,&&是逻辑运算符
回复 使用道具 举报
nice非飞 来自手机 中级黑马 2015-11-22 13:06:26
7#
受教了,突然间感觉自己什么都忘了
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 01:03
这个主要是要看仔细,在&& 和||时一定要把前后分开看,前边为false时,后边的就一步也不执行,最好就不要 ...

是的是的,当时看视频时记住了,时间一长不用挺容易忘记的,幸好今天在论坛里面做了小题,要不然忘得更深了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马