Java最佳实践:使用方法参数实现性能

时间:2012-02-15 12:06:44

标签: java performance

更快和/或更少的资源消耗:

class Foo()
{
    public int value;
}

这样吗?

public int doSomeStuff(Foo f)
{
    return (f.value + 1);
}

public int doOtherStuff()
{
    ...
    Foo f = new Foo();
    int x = doSomeStuff(f);
    ...
)

还是这样?

public int doSomeStuff(int v)
{
    return (v + 1);
}

public int doOtherStuff()
{
    ...
    Foo f = new Foo();
    int x = doSomeStuff(f.value);
    ...
)

在这两种情况下,“doSomeStuff”在foo类中都不会改变任何内容。它只需要知道“价值”。

7 个答案:

答案 0 :(得分:3)

它们都执行相同的操作,发生相同的操作序列。您主要关心的是可维护性和合理的设计。仔细考虑哪些方法需要哪些数据并正确设计。

如果确实遇到问题,可以稍后进行优化。但是你应该总是最后优化。

答案 1 :(得分:1)

就资源消耗而言,它完全相同。 但是第二种选择在编程方面明显更好,因为如果doSomeStuff只需要值,那么传递f就没有意义了。

答案 2 :(得分:0)

我认为根本没有任何性能差异。并且Java编译器无论如何都会优化到最佳...

答案 3 :(得分:0)

取决于您在不致电doSomeStuff的情况下拨打doOtherStuff的频率,但通常性能差异可以忽略不计,如果您只拨打doOtherStuff,那么他们的表现同样有效。< / p>

答案 4 :(得分:0)

可能更好:

Decalre doSomeStuff()作为foo的方法,并调用:f.doSomeStuff()

它更具可读性,并且更容易维护,因为如果你有一个 foo的子类:Bar,您希望计算的内容有所不同 - 您只需在doSomeStuff()中覆盖Bar

您应该更喜欢可读性而不是微优化 - 让编译器为您处理这些。

代码快照:

class foo() {
    public int value; 
    public int doSomeStuff() {
       return value + 1;
    }
}

和:

public int doOtherStuff() {
    ...
    foo f = new foo();
    int x = f.doSomeStuff();
    ...
}

答案 5 :(得分:0)

做之间的区别:

object.intvariable + 1

int + 1

可以忽略不计,与真实世界的应用程序无关。它可能是一两个JVM操作码来查找foo并找到它的值变量,这是不值得一提的。你永远不会注意到,除非你试图用Java创建一个伪实时应用程序(这只是徒劳的练习)。

然而,那说,你这样做的方式非常糟糕。您不应该直接公开value,而是通过getter和setter方法使用正确的数据封装。

答案 6 :(得分:0)

从性能角度来看并不重要。 建议是:不要考虑预成熟优化。考虑代码的正确性和良好设计。

例如你的代码

  1. 不遵循命名约定:类名必须以大写字母
  2. 开头
  3. 包含公共字段。这是被禁止的。使用bean表示法(getter和setter)。
  4. 无法编译(没有类型integer。请在intInteger
  5. 中选择