有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这两个假设之间有什么区别?

if(loadFactor != null && !(trialExists(loadFactor))

if(!(loadFactor == null || trialExists(loadFactor))

在一篇评论文章中,我被要求如果改为第二名,就改为第1名。这有什么区别


共 (2) 个答案

  1. # 1 楼答案

    没有区别

    在这两种情况下:

    • 如果loadFactor为null,则不会对trialExists(loadFactor)求值,并且条件将为false,因此它不会进入if主体
    • 否则,trialExists(loadFactor)将被计算,条件将与结果相反——因此,如果trialExists(loadFactor)返回false,它将只进入if语句体

    这是因为&&||都是短路

    • 如果&&的第一个操作数是false,则不计算第二个操作数,结果只是false
    • 如果||的第一个操作数是true,则不计算第二个操作数,结果只是true

    就我个人而言,我更喜欢第一段代码而不是第二段。在我看来,这就像“如果我们有一个负载系数,而且没有试验。”第二段代码更加模糊,因为内部条件是“如果我们没有负载系数,或者这是一个现有的试验”——在我看来,这不是一个特别自然的条件来表达

  2. # 2 楼答案

    他们要求你用Java的一个例子来展示De Morgan's laws是如何工作的

    "not (A and B)" is the same as "(not A) or (not B)"

    and also,

    "not (A or B)" is the same as "(not A) and (not B)"

    (摘自维基百科)

    1. 首先:

      loadFactor != null && !(trialExists(loadFactor)
      
    2. 我们添加了双重否定:

      !!(loadFactor != null && !(tiralExists(loadFactor))
      
    3. 然后我们可以根据第一定律进行变换(不是(A和B)与(不是A)或(不是B)相同)

      !(!(loadFactor != null) || !!(trialExists(loadFactor)))
      
    4. 现在我们可以消除双重否定:

      !(loadFactor == null || trialExists(loadFactor))
      

    我们从你的问题中得到了第二个if语句