哪一个在变量声明方面给了我更好的性能



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

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

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

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

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

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

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

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

最新更新