美文网首页工作小记
运算符 | 和 ||,& 和 &&到底区别在哪里

运算符 | 和 ||,& 和 &&到底区别在哪里

作者: 叫子非鱼啊 | 来源:发表于2020-04-06 21:21 被阅读0次

如何区分运算符 | 和 ||,& 和 &&?

我们只要记住一下两点就好了。

  • 知道 | 和 & 定义为位运算符,|| 和 && 定义为逻辑运算符。
  • 知道不管单个|和&运算,后边的判断一定会执行。双个运算符则前边满足条件后边才会执行。

什么是与运算和或运算?

  • & 按位与操作,按二进制位进行"与"运算。运算规则:(有 0 则为 0)
  • | 按位或运算符,按二进制位进行"或"运算。运算规则:(有 1 则为 1)
用了那么多的图,给个来源吧(需科学上网) https://t.me/ovov1234

实践的真知
上面已经说了,运算符的作用和在程序中的执行顺序。

先来看一下 | 和 || 的运算情况
你觉得下面的这段代码会输出怎样的内容呢?

    public static void main(String[] args) {
        int i = 1;
        int j = 1;
        
        //  ||运算执行判断
        if (i == 1 || ++j == 1) {
            System.out.println("第一个成立进行||运算后 ---- 执行方法");
        }
        System.out.println("||运算后 j = "+j);
        
        // |运算执行结果
        if (i == 1 | ++j == 1) {
            System.out.println("第一个成立进行|运算后 ---- 执行方法");
        }
        System.out.println("|运算后 j = "+j);
    }
  • 先自己思考一下if中的语句都会执行吗?
  • 最后输出的j值会是多少?

当然这都在第一个条件成立的情况下判断第二个语句是否会执行。(如果第一个条件不成立,两个会是相同的结果,没有区别)

image.png

由此可见,||运算在第一个条件成立时,直接执行if中的语句,是不会执行第二条语句的。|运算则是,不管第一个是否成功,都会去执行第二个语句,所以导致j+1=2

同理,对上面的代码进行修改。使用&和&&进行判断会是什么结果。

    public static void main(String[] args) {
        int i = 1;
        int j = 1;
        
        //  &&运算执行判断
        if (i != 1 && ++j == 1) {
            System.out.println("第一个不成立进行&&运算后 ---- 执行方法");
        }
        System.out.println("&&运算后 j = "+j);
        
        // &运算执行结果
        if (i != 1 & ++j == 1) {
            System.out.println("第一个不成立进行&运算后 ---- 执行方法");
        }
        System.out.println("&运算后 j = "+j);
    }
  • if中的语句会执行吗?
  • 最后输出的j值会是多少?

运行结果如图所示

image.png

由于第一个条件已经不满足了,所以if中的语句是不会执行的。但使用&运算时,程序仍然会判断第二个条件,所以j+1。

总结
既然已经知道了程序中执行的区别,那如何该避免他们出现错误呢?

  • 尽量使用逻辑与、或运算。即(&& 、||)
  • 尽可能的减少在判断中进行其他非判断的运算

程序的世界中很单纯,你给它什么样的指令,它就怎么的去执行,严格执行但不会考虑对错。


想看电影关注我的公众号:电影资源集(支持输入电影名称自动回复了)

喜欢就点个👍吧

相关文章

网友评论

    本文标题:运算符 | 和 ||,& 和 &&到底区别在哪里

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