Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java最佳实践:使用方法参数的性能_Java_Performance - Fatal编程技术网

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;
    }
}
以及:

也许更好:

decare
doSomeStuff()
作为
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方法使用适当的数据封装。

从性能角度看,这并不重要。 建议是:不要考虑提前优化。考虑代码的正确性和良好设计

例如,您的代码

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

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

    例如,您的代码

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

  • 根据java命名约定,您的类应命名为
    Foo
    ,而不是
    Foo
    。这将使您的代码更易于其他程序员阅读。根据java命名约定,您的类应命名为
    Foo
    ,而不是
    Foo
    。这将使您的代码更易于其他程序员阅读“但你应该始终优化最后一个。”+1“但你应该始终优化最后一个。”+11)好的,我总是这样做。在这种情况下,我写这个例子非常快,不关心这些事情……2)好的,注意到。3) 同样,它仅用于说明。不管怎样,谢谢。好的,我总是这样做。在这种情况下,我写这个例子非常快,不关心这些事情。。。2) 好的,注意到了。3) 再说一次,这是为了