日期:2014-05-20  浏览次数:20766 次

怎样调用方法效率高
本人一直有一个问题,如果要经常调用一个类的一些方法,例如工具类(自定义的Util),是定义一个引用变量来调用还是用不断的new 这个类来调用,哪个更加高效?举个例子吧。定义了一个矩阵类Matrix,调用转置,乘积等方法。两种使用方法:

class Matrix{
  //返回两个矩阵的乘积C=A*B
  public double[][] multiply(double[][] A,double[][] B){
  .......
  }
  //返回矩阵A的转置矩阵A'
  public double[][] transpose(double[][] A){
  .......
  }
  //返回两个矩阵的和C=A+B
  public double[][] add(double[][] A,double[][] B){
  .......
  }
}

现在要调用Matrix类计算矩阵A = X'*X+Y,其中X,Y是两个矩阵。

方法(一):
class Test{
  public static void main(String[] args){
  double[][] X = {.......};//输入X
  double[][] Y = {.......};//输入Y
  Matrix matrix = new Matrix();
  double[][] xTrans = matrix.transpose(X);
  double[][] temp = matrix.multiply(xTrans,X);
  double[][] A = matrix.add(temp,Y);
  double[][] C = matrix.multiply(X,Y);//如果还想计算C = X*Y  
  }
}

方法(二):
class Test{
  public static void main(String[] args){
  double[][] X = {.......};//输入X
  double[][] Y = {.......};//输入Y
  double[][] xTrans = new Matrix().transpose(X);
  double[][] temp = new Matrix().multiply(xTrans,X);
  double[][] A = new Matrix().add(temp,Y);  
  }
}

两种方法都可以吧,哪一种效率高呢?当然了,计算一次没有多大区别。如果计算X'*X+Y 是在一个循环中呢?还有一个问题是方法(一)中matrix调用了两次multiply以后是个什么状态?可能这个问题对于高手来说很简单,不吝赐教。

------解决方案--------------------
。。。。。。。。。。。

你的想法是对的,每new一个不但多消耗内存,而且多消耗时间,而且产生更多的垃圾,肯定是方法一效率高。
没啥本质区别,方法二只不过是每调用一个方法就多new出了一个对象,而方法一只使用一个对象而已。

不过在通常的开发中,工具类的方法一般都是声明为static,这样你就可以:类名.方法名()调用了,比你在不同的类里面都new一个对象出来效率高多了
------解决方案--------------------
探讨
引用:
你的想法是对的,每new一个不但多消耗内存,而且多消耗时间,而且产生更多的垃圾,肯定是方法一效率高。
没啥本质区别,方法二只不过是每调用一个方法就多new出了一个对象,而方法一只使用一个对象而已。

不过在通常的开发中,工具类的方法一般都是声明为static,这样你就可以:类名.方法名()调用了,比你在不同的类里面都new一个对象出……

------解决方案--------------------
探讨

引用:
。。。。。。。。。。。

你的想法是对的,每new一个不但多消耗内存,而且多消耗时间,而且产生更多的垃圾,肯定是方法一效率高。
没啥本质区别,方法二只不过是每调用一个方法就多new出了一个对象,而方法一只使用一个对象而已。

不过在通常的开发中,工具类的方法一般都是声明为static,这样你就可以:类名.方法名()调用了,比你在不同的类里面都new一个对象出……