if
在Java中,经典语句有两种类型:if {} else {}
和简写:exp ? value1 : value2
。一个比另一个快还是相同?
声明:
int x;
if (expression) {
x = 1;
} else {
x = 2;
}
三元运算符:
int x = (expression) ? 1 : 2;
那里只有一种“ if”语句。另一个是条件表达式。至于哪种性能更好:它们可以编译为相同的字节码,并且我希望它们的行为相同-
或如此接近以至于您绝对不希望在性能方面选择一个。
有时一条if
语句更具可读性,有时条件运算符将更具可读性。特别是,当两个操作数简单且无副作用时,我建议使用条件运算符,而如果两个分支的主要目的 是
它们的副作用,则可能要使用一条if
语句。
这是一个示例程序和字节码:
public class Test {
public static void main(String[] args) {
int x;
if (args.length > 0) {
x = 1;
} else {
x = 2;
}
}
public static void main2(String[] args) {
int x = (args.length > 0) ? 1 : 2;
}
}
字节码反编译为javap -c Test
:
public class Test extends java.lang.Object {
public Test();
Code:
0: aload_0
1: invokespecial #1
4: return
public static void main(java.lang.String[]
Code:
0: aload_0
1: arraylength
2: ifle 10
5: iconst_1
6: istore_1
7: goto 12
10: iconst_2
11: istore_1
12: return
public static void main2(java.lang.String[
Code:
0: aload_0
1: arraylength
2: ifle 9
5: iconst_1
6: goto 10
9: iconst_2
10: istore_1
11: return
}
如您所见,这里的字节码 略有 不同-
是否istore_1
在brance中发生(不同于我以前的严重缺陷尝试:),但是如果JITter以不同的本机代码结束,我将感到非常惊讶。
三元运算符 三元运算符 ? 应该只用在它能让代码更加清楚的地方。 一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解。或者可以把它们重构到实例变量里面。 推荐: result = a > b ? x : y; 不推荐: result = a > b ? x = c > d ? c : d : y; 当三元运算符的第二个参数(if 分支)返回和条
问题内容: 如果您的目标是测试MySQL列中是否存在字符串(类型为’varchar’,’text’,’blob’等),那么以下哪一项是更快/更有效/更好地使用,为什么? 或者,还有其他方法可以胜任这些方法吗? 与 问题答案: 正如kibibu在上述评论中指出的,FULLTEXT搜索绝对会更快。 但是 : 在我的测试中,它们的表现完全相同。它们都不区分大小写,并且通常会执行全表扫描,这在处理高性能M
问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 如果很短,我将其放在一行中。最近,我一直在将这种样式用于较长或嵌套的三元运算符表达式。一个人为的例子: 您个人使用哪种样式,或者最易读? 编辑:( 关于何时使用
问题内容: 到目前为止,我一直没有通过网络进行搜索,该语句始终具有if和else条件,例如。我想知道三元语句是否可以不使用。假设我有以下代码,如果不为空,我想关闭 (我正在使用Java编程语言。) 问题答案: 不,你不能那样做。 而是尝试以下方法:
以下是关于的几个主题: 三元算子-Java 除此之外,我不懂语法。 我有一个带有和的方法。 三元运算符的语法为 我试过这个: 我有一个错误消息=>
问题内容: 如果使用三元运算符,则会出现nullpointer异常。 但是如果没有 谁能解释为什么? 谢谢苏达 问题答案: 您遇到的行为是由确定三元条件表达式的类型的规则导致的。 就您而言,表达式的类型 是。 这由JLS 15.25 指定。: 条件表达式的类型确定如下: 如果第二个操作数和第三个操作数具有相同的类型(可能为null类型),则这是条件表达式的类型。 如果第二和第三个操作数中的一个是原