哪个让我在变量声明方面表现更好?

Which one gives me better performance in variables declaration?

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

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

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

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

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

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

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

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