zoukankan      html  css  js  c++  java
  • &&和&(||和|)区别

    上代码,引出问题

    public class Test {
        private static int j = 0;
     
        private static Boolean methodB(int k) {
            j += k;
            return true;
        }
     
        public static void methodA(int i) {
            boolean b;
            b = i < 10 || methodB(4);换成b = i < 10 | methodB(4)结果如何?,什么时候输出0,4,8,12呢?
            b = i < 10 | methodB(8);
     
        }
     
        public static void main(String args[]) {
            methodA(0);
            System.out.println(j);
        }
    }
    

     答:&运算符有两种用法:

    (1)按位与;(2)逻辑与。

    &&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都 要求运算符左右两端的布尔值都是true整个表达式的值才是true。

    &&之所以称为短路运算是因为,如果&&左边的表 达式的值是false,右边的表达式会被直接短路掉,不会进行运算。

    很多时候我们可能都需要用&&而不是&,例如在验证用户登录 时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,

    因为第一个条件如果不成立,根本不能进 行字符串的equals比较,否则会产生NullPointerException异常。

    注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如 此。

    这道题主要考的是"|"与"||"的区别
    用法:condition 1 | condition 2、condition 1 || condition 2
    "|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2
    "||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2
  • 相关阅读:
    设计模式学习笔记--原型模式
    设计模式学习笔记--工厂方法模式
    复制、粘贴一个物体的所有组件
    设计模式学习笔记--装饰模式
    模板方法模式(TemplateMethod)
    FreeSql 与 SqlSugar 性能测试(增EFCore测试结果)
    FreeSql 新查询功能介绍
    FreeSql 过滤器使用介绍
    非常贴心的轮子 FreeSql
    .NETCore 下支持分表分库、读写分离的通用 Repository
  • 原文地址:https://www.cnblogs.com/lbloveab/p/7274071.html
Copyright © 2011-2022 走看看