我需要知道以下哪个例子给了我更高的性能?
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在所有情况下都相同
答案 0 :(得分:3)
编译器非常聪明,可以分析和识别初始化的最佳方法。但作为编码实践,首先是首选,下面是第二和第三的缺点。
第二种方式只是增加了代码行。如果您将来需要修改someValue,您(或维护代码的人)需要在两个地方进行修改。如果if块足够长,我们可能会错过修改else块导致错误情况。
第三种方法只是初始化条件块内的变量,并且只能在块内部访问。据我所知,甚至编译器也可能不会通过将其从条件语句中移出来优化初始化。这再次遭受第二种方法的问题。此外,条件块中初始化的变量在外部无法访问,因此如果需要在if / else块之外打印/记录对象,则不允许这样做。
另一个事实:Java编码约定不建议使用以大写字符开头的变量名。
答案 1 :(得分:1)
第一种表现形式是最优的。也就是说,包括JavaC在内的大多数现代编译器都优化了字节代码,以减少或消除不必要的初始化。您可以使用javap或您喜欢的字节码分析器等工具进行检查。
这适用于大多数编译器,而不仅仅是Java。