因此,让我们考虑以下语句在循环内执行超过一百万次。
boolean validity = condition1 || condition2;
可以安全地假设 condition1 和 condition2 内部的计算非常复杂。因此,由于此处有 OR 运算符,我认为首先分别检查 condition1 是明智的,然后在必要时 condition2 之后就像,
boolean validity = condition1;
if( !validity )
validity = condition2;
我应该手动执行这样的优化还是java编译器会自动处理这些事情?
答案 0 :(得分:8)
作为Java语言规范,§15.24说:
条件或运算符
||
运算符类似于|
(§15.22.2),但仅在其左侧操作数的值为false时才计算其右侧操作数。
因此,语言规范要求 ,只有当左边部分为假时,才会评估右边部分。这不是优化,而是语言的一部分。优化不是语言规范的一部分,它们可以使您的代码更快,但它们永远不应该使您的代码表现不同。然而,如果两个部分都被评估为正确的部分可能会产生副作用,则行为会有所不同。
答案 1 :(得分:-1)
java编译器首先能够执行condition1的功能。如果为true,则不再执行condition2的函数。因此不需要优化。这是因为存在OR操作。