更快和/或更少的资源消耗:
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类中都不会改变任何内容。它只需要知道“价值”。
答案 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)
从性能角度来看并不重要。 建议是:不要考虑预成熟优化。考虑代码的正确性和良好设计。
例如你的代码
integer
。请在int
和Integer