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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁秋瑜 中级黑马   /  2013-5-29 00:00  /  1830 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s = 3;
s=s+2;
s+=2;   
有什么区别?
“&”和“&&”的区别?
“|”和“||”的区别?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
s=s+2;编译不会通过,2为int型,要强转。s+=2;可以通过编译
“&&”和“||”有短路原则,“&”和“|”没有

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 FantasticPie 于 2013-5-29 00:16 编辑

s += 2 是 s = s + 2的另一种表达形式,一般大家都按照前一种方式写,更专业。 “&” 和“&&”从本质上的区别是前者是为运算符,后者是逻辑运算符。但是前者也可以当做逻辑运算符来使用,可看以下代码理解当“&”作为逻辑运算符和“&&”的区别:
  1. public static void main(String[] args) {

  2.         int x = 1;
  3.         int y = 1;
  4.         if(x > 2 & y++>2){//这里即使判断了x > 2为假,y++的代码还是会执行,所以后面打印y的值为2
  5.             System.out.println(x);
  6.         }
  7.         System.out.println("x = " + x +" y = " + y);
  8.         
  9.         int a = 1;
  10.         int b = 1;
  11.         if(a>2 && b++>2){//这里即使判断了a > 2为假,y++的代码就不会再执行,所以后面打印b的值为1
  12.             System.out.println(a);
  13.         }
  14.         System.out.println("a = " + a +" b = " + b);
  15.         
  16.     }
复制代码
“|”和“||”的关系与“&”和“&&”关系一样,就不再详说了

【黑马云青年为与你解答,期待与你更多的交流】

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
袁梦希 + 1 + 3 给咱云青年争脸了。

查看全部评分

回复 使用道具 举报
本帖最后由 张俊迪 于 2013-5-29 00:25 编辑

s=s+2;看右边的s是short型2整型编译不能通过因为没有强制转化,而对于s+=2这个语句系统会将其强制转化
对于“&”和“&&”的区别只有一点就是例如:a语句&&b语句,当a语句为假那么将不会执行b语句,而如果是“&”的话那么不管a语句真假都会执行b语句;
对于“|”和“||”:例如a语句||b语句,当a语句为真将不会执行b语句,而对于“|”则不管a语句真假都执行b语句;

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
这个我昨天分享了,我运算符的总结!可以到我发的帖中看看{:soso_e130:}
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
逻辑运算符
                        |--用于连接两个boolean类型的表达
                                &  与
                                        true & true = true;
                                        true & false = false;
                                        false & true = false;
                                        false & false = false;
                                        只有&的两边都是true的时候 结果才是true
                                |  或
                                        true | true = true;
                                        true | false = true;
                                        false | true = true;
                                        false | false = false;
                                        只要有一个是true,结果就是true
                                ^  异或
                                        true ^ true = false;
                                        true ^ false = true;
                                        false ^ true = true;
                                        false ^ false = false;
                                        ^两边如果相同结果为false
                                        ^两边如果不同结果为true
                                !  非
                                        !true = false;
                                        !false = true;
                                &&        短路
                                        如果&&左边为false,右边就不进行判断
                                ||
                                        如果||左边为true,右边就不进行判断
回复 使用道具 举报 1 0
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名
回复 使用道具 举报
如果问题以解决,请结贴,未解决追加提问。谢谢合作
回复 使用道具 举报
本帖最后由 642384938 于 2013-6-1 23:48 编辑

对于short s = 3; s = s + 2; 由于s+2运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s时,编译器将报告需要强制转换类型的错误。
对于short s = 3; s += 2;由于 += java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
  
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
  &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马