-2

我需要知道以下哪个示例给了我更高的性能?

Object O = someValue;
if (condition){
    //statements
    //statements
} else {
    //statements
    //statements
}

或者

Object O;
if (condition){
    O = someValue;
    //statements
    //statements
} else {
    O = someValue;
    //statements
    //statements
}

或者

if (condition){
    Object O = someValue;
    //statements
    //statements
} else {
    Object O = someValue;
    //statements
    //statements
}

注意: someValue 在所有情况下都是相等的

4

2 回答 2

3

编译器足够聪明,可以分析和确定初始化的最佳方式。但作为一种编码实践,第一个是首选,下面是第二个和第三个的缺点。

第二种方式只是增加了代码行数。如果您将来需要修改 someValue,您(或维护代码的人)需要在两个地方进行修改。如果 if 块足够长,我们可能会错过修改 else 块而导致错误情况。

第三种方式只是初始化条件块内的变量,并且只能在块内访问。据我了解,即使编译器也可能无法通过将初始化移出条件语句来优化初始化。这又遇到了第二种方法的问题。此外,在条件块中初始化的变量在外部无法访问,因此如果您需要在 if/else 块之外打印/记录对象,则不允许这样做。

还有一个事实:Java 编码约定不建议使用以大写字符开头的变量名。

于 2017-01-10T08:03:34.247 回答
1

第一个表示将是最佳的。也就是说,包括 JavaC 在内的大多数现代编译器都会优化字节码以减少或消除不必要的初始化。您可以使用 javap 或您最喜欢的字节码分析器等工具进行检查。

这适用于大多数编译器,而不仅仅是 Java。

于 2017-01-10T07:49:25.303 回答