哪一个让我在变量声明中有更好的表现?

时间:2017-01-10 07:41:25

标签: java variables variable-declaration variable-initialization

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

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在所有情况下都相同

2 个答案:

答案 0 :(得分:3)

编译器非常聪明,可以分析和识别初始化的最佳方法。但作为编码实践,首先是首选,下面是第二和第三的缺点。

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

第三种方法只是初始化条件块内的变量,并且只能在块内部访问。据我所知,甚至编译器也可能不会通过将其从条件语句中移出来优化初始化。这再次遭受第二种方法的问题。此外,条件块中初始化的变量在外部无法访问,因此如果需要在if / else块之外打印/记录对象,则不允许这样做。

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

答案 1 :(得分:1)

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

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