我对java中的代码效率有疑问。我目前有一个类似于以下
的方法public class Response extends SuperResponse {
private Object ConfigureResponse = null;
public String getId() {
if(this.getBody() == null || this.getBody().isEmpty()) {
return null;
} else {
// Check if the ConfigureResponse has already been deserialized
// if it has, there is no need to deserialize is again
if(ConfigureResponse == null) {
ConfigureResponse = JAXB.unmarshal(new StringReader(
this.getBody()), Object.class);
}
return ConfigureResponse.getConfigureResponse().getId();
}
}
}// End class
如果重复调用getId
方法,最好保存Id字符串并直接返回,并保存自己的方法调用以返回它吗?或者Java编译器足够智能,可以直接转换这些方法调用。
答案 0 :(得分:6)
编译器无法进行此类优化,但JVM随着时间的推移能够强烈优化此类方法,但前提是它们经常被调用。这显然需要时间,因此如果:
getId
方法调用的方法非常耗时且然后最好引入getId
结果的缓存,可以通过以下方式实现:
向班级Response
添加新属性:
private String id;
将getId
方法重命名为populateId
使用此类代码创建新的getId
方法:
public String getId() {
if (this.id != null) {
return this.id;
}
this.id = populateId();
return this.id;
}
答案 1 :(得分:1)
would it be better practice to save the Id string and return that directly
在这种情况下,没有。调用getter是一个快速的操作,因此你无法获得足够的证据来证明一个潜在错误的新变量。
如果你以后看到一些缓慢,如果非常必要的话,仍然需要添加这个变量
Premature optimization is evil
答案 2 :(得分:0)
不,编译器不够智能。根据我的经验,最好直接返回字符串并节省一些时间。