Java,类成员或方法本地变量:哪一个更适合性能?

时间:2014-10-19 20:56:09

标签: java class methods reference

我想知道类成员变量和方法局部变量之间的区别。这里解释;

这是针对类成员变量的;

    public class Foo{
      static String ref;
      public static void union(String a, String b){
       ref= a+b;
       }
    }

这是方法局部变量;

      public class Foo{

      public static void union(String a, String b){
       String ref= a+b;
       }
    }

假设我经常调用这个函数,在第二个例子中JVM是否每次都创建ref引用(如果我应该像第一个例子一样编写?)或者JVM创建一次并且总是使用它?

2 个答案:

答案 0 :(得分:4)

你需要在这里区分两件事:

  • 变量
  • 物体

在两种情况下,都会创建表达式String的新a + b对象。

使用类字段存储结果时,每次都使用相同的内存。内存位于堆中的某个位置。但是:如果你同时从多个线程调用该方法,它们将使用相同的内存来存储它们的结果,并且它们将覆盖它。这意味着一个线程可能会看到不同线程的结果,这很糟糕。

使用局部变量时,每个方法调用都使用新内存。但这是调用堆栈上的本地内存,实际上并不需要任何费用。另外,您可以同时从多个线程调用您的方法。

因此,您应该使用第二个片段。

答案 1 :(得分:1)

Class fields可以从类中的多个方法获得,而local variables只能从方法中访问。只有当他们真正将类别的属性保留在本地时,才会使用Class fields