Java If语句中的OR运算符 否则的话!emailGet.endsWith.com&!emailGet.endsWith.info{ 错误+=电子邮件应以.info或.com结尾; }

Java If语句中的OR运算符 否则的话!emailGet.endsWith.com&!emailGet.endsWith.info{ 错误+=电子邮件应以.info或.com结尾; },java,if-statement,syntax,Java,If Statement,Syntax,为什么&&扮演OR语句的角色,但当我使用OR本身时,它什么也不做。我能让代码告诉我一条或另一条语句是否为真的唯一方法是使用&&来计算两条语句。与or不同,使用&&背后的逻辑对我来说毫无意义。我遗漏了什么吗?是的,在java中,条件or的布尔运算符是| |。由两个垂直条或管道表示,而不是小写L。类似地,您已经找到了条件or的布尔运算符,即&。这两种说法并不相同,尽管当两种说法都为真时,它们的计算结果都为真。我认为否定词与and&&or组合在一起|| 引起误解 if (!emailGet.e

为什么&&扮演OR语句的角色,但当我使用OR本身时,它什么也不做。我能让代码告诉我一条或另一条语句是否为真的唯一方法是使用&&来计算两条语句。与or不同,使用&&背后的逻辑对我来说毫无意义。我遗漏了什么吗?

是的,在java中,条件or的布尔运算符是| |。由两个垂直条或管道表示,而不是小写L。类似地,您已经找到了条件or的布尔运算符,即&。这两种说法并不相同,尽管当两种说法都为真时,它们的计算结果都为真。

我认为否定词与and&&or组合在一起|| 引起误解

    if (!emailGet.endsWith(".com") && !emailGet.endsWith(".info")) {      
        errors += "Email should end with .info or .com";
    }
    if (emailGet.endsWith(".com") || emailGet.endsWith(".info")) {      
        sucesses += "Email did end with .info or .com";
    }
    if (!(emailGet.endsWith(".com") || emailGet.endsWith(".info"))) {      
        errors += "Email should end with .info or .com";
    }
它总是:

! <this-case> && ! <other-case>
<this-case> || <other-case>
你应该看看吗

! <this-case> || ! <other-case> // *** ERROR *** always true
<this-case> && <other-case>     // *** ERROR *** always false

您知道这是错误的。

请注意关于| |和&&运算符的以下概念:

当多个条件与&&组合时,只要条件的计算结果为真,条件的计算就会继续进行。如果任何条件的计算结果为false,则进一步的计算将停止,并且组合结果为false。只有当所有条件都评估为true时,组合才会产生true。 当多个条件与| |组合时,只要条件的计算结果为false,条件的计算就会继续。如果任何条件的计算结果为true,则进一步的计算将停止,并且组合结果为true。只有当所有条件都评估为false时,组合才会导致false。 基于这些概念,

!emailGet.endsWith(".com") && !emailGet.endsWith(".info")

!(emailGet.endsWith(".com") || emailGet.endsWith(".info"))
让我们在以下场景中分析它们:

假设emailGet=a@b.com !!emailGet.endsWith.com&!emailGet.endsWith.info=>!真的&!emailGet.endsWith.info=>false&&!emailGet.endsWith.info=>false

!!emailGet.endsWith.com | | emailGet.endsWith.info=>!对| | emailGet.endsWith.info=>!真=>假

假设emailGet=a@b.info !!emailGet.endsWith.com&!emailGet.endsWith.info=>!假&!emailGet.endsWith.info=>true&&!true=>true&&false=>false

!!emailGet.endsWith.com | | emailGet.endsWith.info=>!假| |真=>!真=>假

假设emailGet=a@b.c !!emailGet.endsWith.com&!emailGet.endsWith.info=>!假&!emailGet.endsWith.info=>true&&!false=>true&&true=>true


!!emailGet.endsWith.com | | emailGet.endsWith.info=>!假| |假=>!false=>true。

您没有复制所有代码!&&根本不是在玩一个或;您需要的是一个有效的&&so和。对于OR,它将始终为true:be,因为它始终与逻辑位and和OR分别的运算符和|的一个选项不同。此外,运算符&&和| |是快捷方式等价物:如果&&的左侧为false,则表达式将计算为false,而右侧将不计算;如果| |的左侧为true,则表达式将计算为true,而右侧将不计算。在此同一网站上发布的代码与相同!emailGet.endsWith.com | | emailGet.endsWith.info这是否回答了您的问题?只有当两个条件同时满足时,&&运算符才应该在语句中返回某些内容吗?在本例中,&.com和.info同时缺失?是的,任何人都无法在不查看更多代码的情况下确认这两个语句都是真的。| |不是or运算符;这是它的捷径等价物。逻辑位or运算符是|。@Turing85谢谢我已经做了更正。正如我所说:|是逻辑位or,|是快捷方式or。