首页 > 解决方案 > Java && || 运营商先例

问题描述

我需要有关 java 代码中的一个 if 条件的帮助

    public class Main
    {
        public static void main(String[] args) {
            String sHeaderStatus = "1";
            Boolean hasButton = false;
            Boolean editableLineStatus =true;
            String sFrom = "REQ";
            int canChangeSupplier = 0;
            if ((sHeaderStatus.equals("1") || canChangeSupplier == 1 && 
            (sHeaderStatus.equals("10") || sHeaderStatus.equals("14") || sHeaderStatus.equals("85") || sHeaderStatus.equals("86") || sHeaderStatus.equals("87"))
            || hasButton && editableLineStatus && !sHeaderStatus.equals("85")) || sFrom.equals("APPROVAL")) {
                String valdiaton ="true11";
            System.out.println(valdiaton);              
            }       
        }

结果是真的11

    public class Main
    {
        public static void main(String[] args) {
            String sHeaderStatus = "1";
            Boolean hasButton = false;
            Boolean editableLineStatus =false; //changed this one to false
            String sFrom = "REQ";
            int canChangeSupplier = 0;
            if ((sHeaderStatus.equals("1") || canChangeSupplier == 1 && 
            (sHeaderStatus.equals("10") || sHeaderStatus.equals("14") || sHeaderStatus.equals("85") || sHeaderStatus.equals("86") || sHeaderStatus.equals("87"))
            || hasButton && editableLineStatus && !sHeaderStatus.equals("85")) || sFrom.equals("APPROVAL")) {
                String valdiaton ="true11";
            System.out.println(valdiaton);
                
            }
            
        }

结果仍然正确11

我无法理解这个问题。

根据我的理解...

sHeaderStatus.equals("1") || canChangeSupplier == 1 // gave true
(sHeaderStatus.equals("10") || sHeaderStatus.equals("14") || sHeaderStatus.equals("85") || sHeaderStatus.equals("86") || sHeaderStatus.equals("87"))
            || hasButton   // gave false

变得true && false && true && true

同样,第二个代码将变为 true && false && false &&true

我不确定这如何成为现实并在打印线下方。

标签: javaif-statement

解决方案


&&发生在之前||

像这样写代码

if (
  (
    sHeaderStatus.equals("1")
    || canChangeSupplier == 1 && (sHeaderStatus.equals("10") || sHeaderStatus.equals("14") || sHeaderStatus.equals("85") || sHeaderStatus.equals("86") || sHeaderStatus.equals("87"))
    || hasButton && editableLineStatus && !sHeaderStatus.equals("85")
  ) 
  || sFrom.equals("APPROVAL")
)

你可以看到你总是会拥有(something) || false给定的值。

并且仅更改只会editableLineStatus修改 . 的运算符“分组” hasButton && editableLineStatus && !sHeaderStatus.equals("85")

但是,无论您将其更改为什么,您都拥有sHeaderStatus.equals("1"),这是真的,导致逻辑

(true || (false && false) || (false && true/false && true)) || false

总的来说,这是真的,因此进入条件


推荐阅读