java编译器的优化级别是什么?

Kir*_*ran 1 java optimization performance

因此,让我们考虑以下语句在循环内执行超过一百万次.

boolean validity = condition1 || condition2;
Run Code Online (Sandbox Code Playgroud)

可以安全地假设condition1condition2都有非常复杂的计算.所以既然这里有一个OR运算符,我认为首先分别检查condition1然后如果需要,条件2之后是明智的,比如,

boolean validity = condition1;
if( !validity )
    validity = condition2;
Run Code Online (Sandbox Code Playgroud)

我应该手动执行这样的优化还是java编译器会自动处理这些事情?

Tag*_*eev 8

作为Java语言规范,§15.24说:

条件运算||符或运算符运算符类似于|(第15.22.2节),但仅在其左侧操作数的值为false时才计算其右侧操作数.

因此,语言规范要求只有当左边部分为假时,才能评估正确的部分.这不是优化,而是语言的一部分.优化不是语言规范的一部分,它们可以使您的代码更快,但它们永远不应该使您的代码表现不同.然而,如果两个部分都被评估为正确的部分可能具有副作用,则行为会有所不同.