java - 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
我不确定这如何成为现实并在打印线下方。
解决方案
像这样写代码
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
总的来说,这是真的,因此进入条件
推荐阅读
- python - 每次运行 python 脚本时如何打开 cmd 窗口?
- python - 单击按钮会使用 selenium python 刷新页面(意外)
- php - Laravel Nova 没有坚持新模式
- spring-boot - Spring Boot 2.0 中是否有替代 DTO 的方法
- go - 解释 Go 中游戏的内存使用情况
- kubernetes - 访问 kubernetes 集群外的 bitnami/kafka
- sql - 水晶报表 10 (VS2008) - SDF 数据库
- c++ - 简单的二进制搜索对我不起作用。我正在尝试从文本文件中搜索一个单词
- c# - 如何等待 form2 完成?
- javascript - 如何让附加到全局的属性与 sinon 一起正确存根?