美文网首页
【Java面试题】55 说说&和&&的区别。说说|和||的区别。

【Java面试题】55 说说&和&&的区别。说说|和||的区别。

作者: 暖熊熊 | 来源:发表于2017-10-22 17:12 被阅读0次

&&逻辑与  ||逻辑或  它们都是逻辑运算符
& 按位与  | 按位或  它们都是位运算符

if (a == 1 && b == 2) // 这是说既要满足a=1也要满足b=2
if (a == 1 || b == 2) // 这是说或者满足a=1或者要满足b=2

&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真

package com.ghw.test;

public class Derived {

    public static void main(String[] args) {
        String s = null;
        int a = 1;

        // System.out.println(s != null && a++ == 1); // &&有短路功能,a的值还是1 false 1
        // System.out.println(a);
        //
        // System.out.println(s != null & a++ == 1); // &没有短路功能,a的值是2 false 2
        // System.out.println(a);
        //
        // System.out.println(s == null || a++ == 1); // ||有短路功能,a的值是1 true 1
        // System.out.println(a);
        //
        // System.out.println(s == null | a++ == 1); // |没有短路功能,a的值是2 true 2
        // System.out.println(a);

        System.out.println(s != null && s.equals(""));
    }
}

&&还具有短路的功能,即如果第一个表达式为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。

相关文章

网友评论

      本文标题:【Java面试题】55 说说&和&&的区别。说说|和||的区别。

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