zoukankan      html  css  js  c++  java
  • C# 条件与&&与条件或||的使用总结

    CSDN说明:

    条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。

    件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数

    同时我们还要了解到  || 和 && 都是左结合性的逻辑运算符,所以看下面的例子

    class Program
        {
            static void Main(string[] args)
            {
                int a = 9;
                int b = 10;
                int c = 11;
                int d = 12;
                if (d>b || c > b && a>b)
                {
                    Console.WriteLine("true");
                }
                Console.ReadKey();
            }
        }

    所以在判断到d>b为true时,后面的部分c > b && a>b就不会再运算,进入条件语句里面


    更正:

    上面的结果原因是由于 && 的优先级高于 || ,所以上面的条件相当于 d>b || (c>b && a>b) 。在看一个例子

    1 if ( a > b && c > b || d > b) 
    2             {
    3                 Console.WriteLine("true");
    4             }

    上面这个结果也是ture,以为上面的条件相当于 (a>b && c>b) || d>b。

    上面我们已经知道了&& 的优先级高于 || ,那么下面我们通过两位一种方式看看 && 和 || 的短路特性(就是开篇CSDN说明:中说的特性)及其的结合性。

    看下面的代码

     1 class Program
     2     {
     3         static int trueTimes = 1;
     4         static int falseTimes = 1;
     5         static bool GetTrue()
     6         {
     7             Console.WriteLine("Execute GetTrue():" + trueTimes++);
     8             return true;
     9         }
    10 
    11         static bool GetFalse()
    12         {
    13             Console.WriteLine("Execute GetFalse():" + falseTimes++);
    14             return false;
    15         }
    16 
    17         static void Main(string[] args)
    18         {
    19             Console.WriteLine(GetTrue() && GetTrue() || GetFalse());
    20             Console.ReadKey();
    21             
    22         }
    23 
    24         
    25     }

    输出结果为

    Execute GetTrue():1
    Execute GetTrue():2
    True

    分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetTrue()时,还会执行第二个GetTrue()才能确定真个表达式为真,其实对于 || 后面的方面,就会被短路,不被执行,因为前面的结果已经可以证明整个表达式为True。

    我们再换个逻辑表达式

    1 static void Main(string[] args)
    2         {
    3             Console.WriteLine(GetFalse() && GetTrue() || GetFalse());
    4             Console.ReadKey();
    5             
    6         }

    输出结果为

    Execute GetFalse():1
    Execute GetFalse():2
    False

    分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetFalse()时,(GetTrue() && GetTrue() )就一定为假,所以后面的GetTrue()不会执行,被短路,这个里面我们也可以看出&& 和 || 是从左到右的结合方式,这个时候我们必须继续执行||后面的逻辑,才能确认整个表达式是真是假,所以GetFalse会被执行。

    上面是我这边的更正,如果有错误或疏忽之处,望不惜赐教!

  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/liuww/p/4658176.html
Copyright © 2011-2022 走看看