这些陈述之间有什么区别吗?

时间:2012-05-30 05:35:44

标签: java performance memory resources method-call

之间有什么区别:

String x = getString();
doSomething(x);

VS

doSomething(getString());

资源和性能明智,特别是它在一个循环中完成了数十次,数百次或数千次?

5 个答案:

答案 0 :(得分:7)

它有相同的开销。局部变量就是为了让您的生活更轻松。在VM级别,它们不一定存在,当然也不再存在机器代码。

所以你需要担心的是getString(),无论它是否具有潜在的昂贵性。 x很可能根本没有效果。

答案 1 :(得分:1)

首先我要说的是,你的首要目标应该是保持代码可读性。您的编译器几乎总是比简单的优化更好。相信它!

响应您的具体示例:为每个示例生成的字节码不同。但是,它似乎没有太大的区别,因为在Integer.MAX_VALUE迭代的循环中,两种方法之间没有统计上显着或甚至一致的差异。

答案 2 :(得分:0)

我相信在编译时两者都是相同的,但在某些情况下,第一个可能会变得更具代码可读性。

答案 3 :(得分:0)

两个陈述都是一样的。唯一不同的是,在第一种方法中,您使用了局部变量X,可以使用第二种语法来避免。

答案 4 :(得分:0)

这在很大程度上取决于用例。你是否会使用那个确切的字符串重复调用doSomething?然后使用局部变量更有效。但是,如果是单个呼叫或使用不同字符串的多个呼叫,则没有区别。