【JAVA演示】||和|的异同,&&和&的异同

一、||和|的异同

  1. 相同点:||和|都可以用作逻辑或的运算符,表示逻辑与(or),只要有一方为true,则结果为true。否则,当运算符两边的表达式的结果都为false时,整个运算结果才为false。

  2. 区别:”||“执行过程中会出现“短路”的现象。即若符号”||”前的表达式如果为true,那么后面的那个表达式将不会被执行,直接返回true。

  3. 示例代码:

    //int i = 0, j = 1;
    //”||“执行过程中会出现“短路”的现象。即若符号”||”前的表达式如果为true,那么后面的那个表达式将不会被执行,直接返回true。
    //if (i == 0 || ++j > 0) j不会增长,if (i == 0 | ++j > 0) j会增长
    int i = 0, j = 1;
    if (i == 0 || ++j > 0) {
    	System.out.println("j=" + j); //输出j=1,即未执行 ++j > 0语句
    }
    if (i == 232 || ++j > 0) {
    	System.out.println("j=" + j); //输出j=2,执行++j > 0该语句
    }
    j=1;
    if (i == 0 | ++j > 0) {
    	System.out.println("j=" + j); //输出j=2,执行 ++j > 0语句
    }
    

    结果:
    在这里插入图片描述

二、&&和&的异同

符号”&&”和符号”&”与”||“和“|”同理

  1. 相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true。否则,只要有一方为false,则结果为false。

  2. 区别:&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。
    示例代码:

    //int i = 0, j = 1;
    //&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
    //if (i == 232 && ++j > 0) j不会增长,if (i == 232 & ++j > 0) j会增长
    int i = 0, j = 1;
    if (i == 232 && ++j > 0) {
    	System.out.println("测试!!!");
    } else {
    	System.out.println("j=" + j); //输出j=1,即未执行 ++j > 0语句
    }
    if (i == 0 && ++j > 0) {
    	System.out.println("j=" + j); //输出j=2,执行++j > 0该语句
    }
    j = 1;
    if (i == 232 & ++j > 0) {
    	System.out.println("测试!!!");
     } else {
    	System.out.println("j=" + j); //输出j=2,执行 ++j > 0语句
    }
    

    结果:
    在这里插入图片描述

三、复杂的例子

理解了这些,你就能明白我下面的第二段代码为啥删去一些判断表达式

扫描二维码关注公众号,回复: 11005011 查看本文章
boolean b = (i == 0 && j != 0) || (i == 0 && j == 0);

j != 0为true时,因为||的短路特性,就不会计算||之后的逻辑表达式,会直接返回true。所以当计算||之后的逻辑表达式时,j!=0肯定为false,即j==0肯定为true。
||之后的逻辑表达式相当于(i == 0 &&true),而(i == 0 &&true)等价于i==0

boolean b = (i == 0 && j != 0) || (i == 0);
发布了129 篇原创文章 · 获赞 116 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43124279/article/details/105594001
今日推荐