[英]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 方法使用适当的数据封装。
从性能的角度来看,这无关紧要。 建议是:不要考虑过早的优化。 考虑代码的正确性和良好的设计。
例如你的代码
integer
。在int
和Integer
选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.