Java 长短路逻辑运算

  • 长路与运算 &
  • 短路与运算 &&
  • 长路或运算 |
  • 短路或运算 ||

长路与运算 &

运行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        int res1 = int1 & int2;
        boolean res2 = int1>0 & int2<3 ;

        System.out.println(res1);
        System.out.println(res2);

    }
}

返回结果为:

0
true

对于长路与运算 &:

  1. 当运算符两边都是整数时,会进行逐位与运算(二进制逻辑运算);当两边是关系运算时,是逻辑运算。
    2.长路与运算会将两边的关系运算结果都计算出来(不明白的话看到下面的短路与运算就知道了)。
短路与运算 &&

简单修改上面的代码运行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        int res1 = int1 && int2;
        boolean res2 = int1>0 && int2<3 ;

        System.out.println(res1);
        System.out.println(res2);

    }
}

上面的代码会在 int res1 = int1 && int2;处报错,报错信息为‘&&’操作符不能被用于int,int。显然,短路运算符不支持按位逻辑运算

运行如下代码

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;
        boolean res2 = int1<0 && int2<3 ;

        System.out.println(res2);

    }
}

运行结果为 false

短路与运算 && 与长路与运算 &的区别在于:

  • 短路运算不支持按位运算。
  • 如果左条件为false, && 运算将不会再继续计算右边关系表达式,这样能提高程序的效率。
长路或运算 |

运行如下代码:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;

        int res1 = int1 | int2;
        boolean res2 = int1>0 | int2<1;



        System.out.println(res1);
        System.out.println(res2);

    }
}

运行结果为:

3
true

对于长路或运算 |:

当运算符两边都是整数时,会进行按位或运算(二进制逻辑运算);当两边是关系运算时,是逻辑运算。
2.长路或运算会将两边的关系运算结果都计算出来,不管左边的关系表达式是不是true。

短路或运算 ||

简单修改上面的代码运行如下程序:

public class LogicCalculate {
    public static void main(String[] args) {
        int int1 = 1;
        int int2 = 2;

        boolean res1 = int1>0 || int2<1;
        System.out.println(res1);

    }
}

运行结果为 true

短路与运算 || 与长路与运算 | 的区别在于:

  • 短路运算不支持按位运算。
  • 如果左条件为True, || 运算将不会再继续计算右边关系表达式,这样能提高程序的效率。

结论:

  • 长路逻辑运算支持按位运算,而短路运算不支持。
  • 短路逻辑运算相较于长路逻辑运算,效率更高,因此进行逻辑运算时应当使用短路逻辑运算符。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • •1 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语...
    CONLYOUC阅读 12,806评论 9 66
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,632评论 18 399
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 6,846评论 0 51
  • 为了见你 特地换上灰西裤与小白鞋 在时间流逝的失望中安慰自己 我们约好的 日落时分 晴天冷漠看向我 他不会来了 我...
    姬雨彤v阅读 1,301评论 0 0
  • 我们有一个项目是需要做横竖屏旋转的,就是根据服务器返回的指令做个旋转,总结一下:两种根据服务器指令来旋转屏幕都需要...
    Bob林阅读 4,430评论 0 5

友情链接更多精彩内容