繁体   English   中英

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

[英]Java Best Practices: Performance with method parameters

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

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 类中的任何内容。 它只需要知道“价值”。

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

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

在资源消耗方面,完全一样。 但是第二个选项在编程方面显然更好,因为如果 doSomeStuff 只需要值,那么传递 f 就没有意义了。

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

取决于您在不调用doSomeStuff情况下调用doOtherStuff ,但通常性能差异可以忽略不计,如果您只调用doOtherStuff那么它们的性能相同。

可能更好:

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

它更具可读性并且更容易维护这样做,因为如果您有foo的子类: Bar ,并且您想计算一些不同的东西 - 您所要做的就是覆盖Bar doSomeStuff()

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

代码快照:

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

和:

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

做的区别:

object.intvariable + 1

int + 1

微不足道,以至于与现实世界的应用程序无关。 查找 foo 并找到不值得一提的值变量可能是另外一两个 JVM 操作码。 除非您尝试用 Java 创建一个伪实时应用程序,否则您永远不会注意到这一点(这只是徒劳的练习)。

但是,话虽如此,您这样做的方式非常糟糕。 您不应直接公开value ,而应通过 getter 和 setter 方法使用适当的数据封装。

从性能的角度来看,这无关紧要。 建议是:不要考虑过早的优化。 考虑代码的正确性和良好的设计。

例如你的代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM