美文网首页Android开发经验谈Android技术知识
#这些不知道也敢说自己是java程序猿!!!(&& 、& 、||

#这些不知道也敢说自己是java程序猿!!!(&& 、& 、||

作者: ifjgm | 来源:发表于2019-10-12 23:27 被阅读0次
  • &&:短路与,当&&前面判断为false,后面不再执行(短路)
    • 左边为false,运算结果为false。
    • 左边为true,同时右边也为true 结果为true
理解:同时为true才为true,短路
  • & :与,左右两边都运算(不短路)
    • 前后 有一个false则为false
    • 前后都为true则为true
理解:同时为true才为true,不短路
  • ||:短路或
    • 前面true ,结果为true不在判断
    • 前面false 后面为false 结果为false。后面为true 结果为true
理解:一个为true就为true,短路
  • |:非短路或
    • 前后有个true 则为true
    • 前后都为false 则为false
理解:一个为true就为true,不短路
栗子:
//正确写法的代码
if((str!=null)&&(!str.equals(""))){

  System.out.println("正确代码");
}

如果将&&改为&则会抛出NullPointerException异常,因为&& 短路与,所以不会进行后面的判断所以不会报错

二:按位与的运算符(&)

  • 参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。

  • 负数:按补码形式来算
  • 用途:
  • (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
  • (2)取一个数中指定位

方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
X的低(后面)四位是1110,对吧。那么X与哪个数按位与运算才能得到这后四位呢??这个数有下面的特征:需要的留下的那些位为1,不需要的那些位为0,即可。我们看下这题。我们需要后四位。那么这个被按位与的数就应该后四位都为1 ,前面四位不要。所以每个位上为0。
于是00001111.与这个数&按位与运算即可得带后四位。

三:按位或的运算符(|)

  • 参加运算的两个对象,按二进制位进行“或”运算。运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。

  • 负数按补码形式参加按位或运算
  • 用途
  • 把数据中的某个位的数替换为 1
    方法:假设该数为X,替换X数的右边第二个数为1 那么X 就与00000010按位或运算即可 这个数的特点是右边第二位数为 1.其他都为0
个人经验,难免疏漏,如有不对,欢迎指正!

相关文章

网友评论

    本文标题:#这些不知道也敢说自己是java程序猿!!!(&& 、& 、||

    本文链接:https://www.haomeiwen.com/subject/anvtzttx.html