当Java if语句同时具有赋值和相等性检查或
-d时,它是如何工作的??
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
为什么这个印刷是假的?
表达式test1=false | | test1==false
将在以下步骤中求值。
步骤:1-test1=false | | test1==false
//的优先级最高
STEP: 2-test1=false||false
//运算符||
具有更高的优先级
步骤:3-test1=false
步骤:4-false
因为表达式的布尔值变为false。所以else语句正在执行。
基本上,这是一个优先问题。您假设您的代码相当于:
if ((test1 = false) || (test1 == false))
... 但事实并非如此。它实际上相当于:
if (test1 = (false || test1 == false))
... 这相当于:
if (test1 = (false || false))
(因为test1
一开始是true
)
... 这相当于:
if (test1 = false)
它将值false
赋值给test1
,结果表达式为false
。
有关运算符优先级的有用表,请参阅运算符Java教程。
表达式的解析方式与您的想法不同。它不是
(test1=false) || (test1 == false)
在这种情况下,结果应该是true
,但是
test1 = (false || test1 == false)
首先计算false | | test1==false
表达式的值,它是false
,因为test1
在计算中被设置为true
。
以这种方式解析它的原因是|
的优先级低于=
运算符的优先级,但高于赋值运算符=
的优先级。
我一直在想一些初学者的错误,最后我犯了语句中的错误。我对代码进行了一些扩展: 我已经看到语句返回true,它
我目前正在修复别人的Java代码中的一个bug,但我无法解释这个bug。所讨论的代码是下面的if语句: 其中初始化为和函数如下所示: 令我困惑的是,即使被设置为false,代码仍然调用并执行函数。我一直认为这是不应该发生的短路。if语句本身总体上仍然被计算为false,因为只有第一个代码段中的else-block中的代码被执行。 那么,这个if语句为什么会有这样的行为呢?是短路失败,还是我误解了原
这段代码给出的答案不是很直观: 0 1 我明白为什么会发生这种情况-赋值的左侧返回对底层值的引用,同时创建上述值,然后才使用新计算的对右侧进行评估映射。 这种行为在C标准中是否有表述?还是求值顺序没有定义? 使用g 5.2.1获得结果。
问题内容: 给出以下代码: 为什么会这样?我以为布尔值会被强制转换为数字。因此变得和变。第二条if语句很有意义,但是我不明白为什么第一条语句导致要评估内部循环。这里发生了什么? 问题答案: 它被强制转换为布尔值。任何非空字符串的求值为true。 根据[ECMAScript语言规范]: ## 12.5 声明 ### 语义学 生产 IfStatement : Expression Statement
有可能做如下事情吗: 或者: 我知道用很多if-else语句也可以实现同样的目标,但如果它像上面那样工作,看起来会更干净。
问题内容: 说我有一大堆的是无论是变量或。我想在一个if语句中评估一组这些变量,以查看它们是否都像这样: 除非那行不通。我知道我可以这样做: 但这是非常丑陋的-特别是如果这些if语句将在我的代码中频繁出现。有什么方法可以使用更简洁的语法进行此评估(例如第一个示例)? 问题答案: 您永远不要使用(或)测试布尔变量。相反,要么写: 或使用(以及相关问题的表弟): 或使用Python的可传递比较: