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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

23 个回复

倒序浏览
运行效果是一样的呀,就是为了提高所谓的效率,就那么一丁点的效率,根本感觉不出来的
回复 使用道具 举报
nice非飞 发表于 2015-11-21 23:54
运行效果是一样的呀,就是为了提高所谓的效率,就那么一丁点的效率,根本感觉不出来的 ...

肯定是不一样的,你看一下这段程序
class Test {
        public static void main(String[] args) {
                int a = 5;
                int b = 6;
                int i = 5;
                int j = 6;
                if (a++ > 5 & b++ > 6)
                {
                        a = 8;
                        b = 10;
                }
                System.out.println("a = "+a+" , b = "+b);
                if (i++ > 5 && j++ > 6)
                {
                        i = 8;
                        j = 10;
                }
                System.out.println("i = "+i+" , j = "+j);
        }
       
}
输出结果是:
---------- java ----------
a = 6 , b = 7
i = 6 , j = 6
回复 使用道具 举报 2 0
隔壁马良 发表于 2015-11-22 00:43
肯定是不一样的,你看一下这段程序
class Test {
        public static void main(String[] args) {

很赞很赞,这个知识点老是记不牢,看了你的回答又学习了一遍。
回复 使用道具 举报
@夏一 发表于 2015-11-22 00:50
很赞很赞,这个知识点老是记不牢,看了你的回答又学习了一遍。

这个主要是要看仔细,在&& 和||时一定要把前后分开看,前边为false时,后边的就一步也不执行,最好就不要看后边的了,影响结果
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 01:03
这个主要是要看仔细,在&& 和||时一定要把前后分开看,前边为false时,后边的就一步也不执行,最好就不要 ...

是的是的,当时看视频时记住了,时间一长不用挺容易忘记的,幸好今天在论坛里面做了小题,要不然忘得更深了。
回复 使用道具 举报
nice非飞 来自手机 中级黑马 2015-11-22 13:06:26
7#
受教了,突然间感觉自己什么都忘了
回复 使用道具 举报
&是位运算符,&&是逻辑运算符
回复 使用道具 举报
萧未然 发表于 2015-11-22 14:46
&是位运算符,&&是逻辑运算符

你说的欠佳,
     位运算符中包含    :  &、|,~、^、>>、>>>、<<;调用位运算符的都是数值型数据
    逻辑运算符中包含  :  &、|、!、^、&&、|、||、!;调用逻辑运算符的都是条件表达式(逻辑表达式两侧应该是boolean数据)
怎么区分位运算符中与逻辑运算符中相同的符号,是个难点
回复 使用道具 举报
小河北 发表于 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 23:20
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
if(expression1 & expression2){}
中ex ...

谢谢哥们!我再仔细研究一些
回复 使用道具 举报
小河北 发表于 2015-11-25 00:06
谢谢哥们!我再仔细研究一些

{:2_36:}   
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 01:03
这个主要是要看仔细,在&& 和||时一定要把前后分开看,前边为false时,后边的就一步也不执行,最好就不要 ...

为啥if判断后,不会把8和10赋值给abij呢
回复 使用道具 举报
学习了。
回复 使用道具 举报
不过还是复习了一下,差不多都忘了
回复 使用道具 举报
知识都是一点一点积攒的。。
回复 使用道具 举报
白羽蘇芳 发表于 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 还是保持原值

回复 使用道具 举报
oup 中级黑马 2015-11-25 23:33:39
18#
好多大神出没
回复 使用道具 举报
很赞 这个东西记得不是很清楚 现在又复习巩固了下  
回复 使用道具 举报
隔壁马良 发表于 2015-11-22 00:43
肯定是不一样的,你看一下这段程序
class Test {
        public static void main(String[] args) {

这个示例给力,理解了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马