将操作结果分配给常量

时间:2014-12-28 11:10:11

标签: java constants

我正在尝试进行微小的修改以提高程序的性能。特别是在常数处。我有常量:WIDTH = x,HEIGHT = y和AREA = x * y。

现在,当使用常量AREA时,java如何继续?

是否每次计算x * y的结果并在需要的地方使用它?或者它在开始时计算一次x * y,并将结果存储在"变量" AREA?

换句话说,假设WIDTH = 10,HEIGHT = 20;自己做计算并指定AREA = 200更好吗?或者只写AREA = WIDTH * HEIGHT?还假设您在程序中需要多次此常量。

就我而言,我认为在性能/效率方面并不重要,但我想在大型程序中会这么做。

谢谢!

编辑:明确我的意思"常数":

e.g。

final static int WIDTH = 10, 
    HEIGHT = 20, 
    AREA = HEIGHT*WIDTH;

1 个答案:

答案 0 :(得分:3)

假设你是这个意思:

 public class Test {
     final static int WIDTH = 10, HEIGHT = 20, AREA = HEIGHT * WIDTH;
 }

然后所有这三个常量都是编译时常量。另一方面,在

 public class Test {
     static int WIDTH = 10, HEIGHT = 20, AREA = HEIGHT * WIDTH;
 }

变量不是常量,但表达式仍然只被评估一次......当Test类被初始化时。

表达式多次执行的唯一情况如下:

 public class Test {
     final int WIDTH = 10, HEIGHT = 20, AREA = HEIGHT * WIDTH;  // non-static field
 }

或者这个:

 public class Test {
     public void method() {
         final int WIDTH = 10, HEIGHT = 20, AREA = HEIGHT * WIDTH; // local variable
     }
 }

但是在所有情况下,表达式只会在每次评估声明时在运行时计算一次(如果有的话)。当(例如)使用常量或变量时,它不会被评估。


你说:

  

就我而言,我认为在性能/效率方面并不重要,但我想在大型程序中会这样做。

在使用静态的情况下,与(仅)其他程序启动开销相比,差异将太小而无法相关。

可能在非静态情况下是相关的,但可能不是。这取决于表达式相对于应用程序正在执行的所有其他事情的评估频率。


建议:尝试在此级别优化代码通常是浪费时间...除非1)您已经测量了应用程序性能并确定它确实是一个问题而2)您有分析了应用程序并确定您正在考虑的代码部分确实是性能瓶颈。