Java最佳实践:使用方法参数的性能
哪个更快和/或更少消耗资源:Java最佳实践:使用方法参数的性能,java,performance,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)
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类中不会改变任何内容。它只需要知道“值”。它们都执行相同的操作,发生相同的操作序列。您主要关心的是可维护性和合理的设计。仔细考虑哪些方法需要哪些数据,并正确设计
如果确实存在问题,您可以稍后进行优化。但您应该始终在最后进行优化。它们都执行相同的操作,发生相同的操作序列。您主要关心的是可维护性和合理的设计。仔细考虑哪些方法需要哪些数据,并正确设计
如果确实存在问题,您可以稍后进行优化。但您应该始终在最后进行优化。我认为根本没有任何性能差异。Java编译器将优化到最好的…我不认为有任何性能差异。Java编译器将优化到最佳状态…取决于在不调用
doOtherStuff
的情况下调用doSomeStuff
的频率,但通常性能差异可以忽略不计,如果您只调用doOtherStuff
,那么它们的性能将相同。取决于您在不调用doOtherStuff
的情况下调用doSomeStuff
的频率,但一般来说,性能差异可以忽略不计,如果只调用doOtherStuff
,那么它们的性能将相同。就资源消耗而言,这是完全相同的。
但第二个选项显然在编程方面更好,因为如果doSomeStuff只需要值,那么就没有必要通过f。就资源消耗而言,它是完全相同的。 但是第二个选项在编程方面显然更好,因为如果doSomeStuff只需要值,那么传递f就没有意义了。可能更好: decare
doSomeStuff()
作为foo
的一种方法,并调用:f.doSomeStuff()
它的可读性更高,维护起来也更容易,因为如果您有
foo
的子类:Bar
,您需要计算一些不同的东西-您所要做的就是在Bar
中重写dosometuff()
与微优化相比,您应该更喜欢可读性——让编译器为您处理这些问题
代码捕捉:
class foo() {
public int value;
public int doSomeStuff() {
return value + 1;
}
}
以及:
也许更好:
decaredoSomeStuff()
作为foo
的一种方法,并调用:f.doSomeStuff()
它的可读性更高,维护起来也更容易,因为如果您有
foo
的子类:Bar
,您需要计算一些不同的东西-您所要做的就是在Bar
中重写dosometuff()
与微优化相比,您应该更喜欢可读性——让编译器为您处理这些问题
代码捕捉:
class foo() {
public int value;
public int doSomeStuff() {
return value + 1;
}
}
以及:
做以下事情的区别:
object.intvariable + 1
及
是如此的微不足道以至于与现实世界的应用程序无关。查找foo并找到它的值变量可能需要一个或两个以上的JVM操作码,这一点不值得一提。除非您试图用Java创建一个伪实时应用程序(这几乎是徒劳的练习),否则您永远不会注意到这一点
然而,也就是说,你这样做是非常糟糕的。您不应该直接公开
值
,而应该通过getter和setter方法使用适当的数据封装。这样做的区别:
object.intvariable + 1
及
是如此的微不足道以至于与现实世界的应用程序无关。查找foo并找到它的值变量可能需要一个或两个以上的JVM操作码,这一点不值得一提。除非您试图用Java创建一个伪实时应用程序(这几乎是徒劳的练习),否则您永远不会注意到这一点
然而,也就是说,你这样做是非常糟糕的。您不应该直接公开
值
,而应该通过getter和setter方法使用适当的数据封装。从性能角度看,这并不重要。
建议是:不要考虑提前优化。考虑代码的正确性和良好设计
例如,您的代码
integer
。请在int
和integer
中选择从性能角度看,这并不重要。 建议是:不要考虑预先成熟的优化,要考虑代码的正确性和良好的设计 例如,您的代码
integer
。请在int
和integer
中选择根据java命名约定,您的类应命名为
Foo
,而不是Foo
。这将使您的代码更易于其他程序员阅读。根据java命名约定,您的类应命名为Foo
,而不是Foo
。这将使您的代码更易于其他程序员阅读“但你应该始终优化最后一个。”+1“但你应该始终优化最后一个。”+11)好的,我总是这样做。在这种情况下,我写这个例子非常快,不关心这些事情……2)好的,注意到。3) 同样,它仅用于说明。不管怎样,谢谢。好的,我总是这样做。在这种情况下,我写这个例子非常快,不关心这些事情。。。2) 好的,注意到了。3) 再说一次,这是为了