如果我想实现一些可以通过两种方式实现的条件代码。那么哪种方式更好的是条件运算符?:或if..then..else ??
这取决于。通常,您希望活动的主要流程在代码的结构中表示。如果算法的关键是变量x
已初始化,那么最好的解决方案是使用条件运算符:
x = condition ? f1() : f2();
如果决策是了解正在发生的事情的关键问题,那么您将首选if
。实际上,这意味着当两者都可行时,您将使用?:
。关键是“合理”
—如果您发现在子表达式中使用逗号运算符,则这些子表达式会有副作用,那么使用?:
可能不是“合理的”。
当您使用?:
运算符时,除了最简单的情况外,都应完全像设置格式一样if
,例如:
x = condition
? complex_expression_1
: complex_expression_2;
我经常这样做。(在一种特殊情况下,我会推送它:如果我可以将整个函数简化为单个return语句。我仍然不会允许逗号运算符的副作用,但是有时我会使用比其他方式更复杂的表达式将。)
GCC(4.8.2版)手册中规定了以下内容: < code >-ftree-loop-if-convert-stores :< br >尝试同时if-convert包含内存写入的条件跳转。这种转换对于多线程程序来说是不安全的,因为它将有条件的内存写入转换为无条件的内存写入。举个例子, 被转换为 可能产生数据竞争。 然而,我想知道使用与语句。 < li >在第一段代码中,只有满足条件时,< code
问题内容: 如果使用三元运算符,则会出现nullpointer异常。 但是如果没有 谁能解释为什么? 谢谢苏达 问题答案: 您遇到的行为是由确定三元条件表达式的类型的规则导致的。 就您而言,表达式的类型 是。 这由JLS 15.25 指定。: 条件表达式的类型确定如下: 如果第二个操作数和第三个操作数具有相同的类型(可能为null类型),则这是条件表达式的类型。 如果第二和第三个操作数中的一个是原
问题内容: 我对条件运算符有些疑惑。考虑以下两行: 为什么f1变为null且第二条语句引发NullPointerException? Langspec-3.0第15.25段说: 否则,第二和第三操作数分别为S1和S2类型。令T1为对S1进行装箱转换所产生的类型,而T2为对S2进行装箱转换所产生的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的
我对条件运算符有点困惑。请考虑以下两行: 为什么f1变成null,而第二条语句抛出NullPointerException? LANSPEC-3.0第15.25段SAIS: 否则,第二和第三操作数的类型分别为S1和S2。设T1是对S1应用装箱转换得到的类型,设T2是对S2应用装箱转换得到的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的结果。
Java 提供了一个特别的三元运算符(也叫三目运算符)经常用于取代某个类型的 if-then-else 语句。 条件运算符的符号表示为“?:”,使用该运算符时需要有三个操作数,因此称其为三目运算符。使用条件运算符的一般语法结构为: 其中,expression 是一个布尔表达式。当 expression 为真时,执行 statement1, 否则就执行 statement3。此三元运算符要求返回一个
主要内容:RxJava 条件运算符 介绍,RxJava 条件运算符 示例RxJava 条件运算符 介绍 以下是用于 Observable 的条件运算符。 运算符 描述 All 评估发出的所有项目以满足给定标准。 Amb 仅在给定多个 Observable 的情况下从第一个 Observable 发出所有项目。 Contains 检查 Observable 是否发出特定项目。 DefaultIfEmpty 如果 Observable 不发出任何内容,则发出默认项。 Se