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

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

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,837评论 0 11
  • 下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题...
    独念白阅读 1,391评论 0 3
  • 豆子特别喜欢F1比赛,尤其喜欢法拉利,是法拉利的忠实车迷,说起历年的F1赛事真是如数家珍,头头是道。他还特别向往能...
    近馨阅读 167评论 3 5
  • 2017-2-14小雪 早上醒来打开手机,铺天盖地的情人节信息,各种秀恩爱,哈哈! 于是我也按捺不住,给孩爸发了一...
    心境色彩阅读 223评论 0 0