java:使用最终的静态int = 1比仅仅普通1更好吗?

我刚看到一个类(一个很大的API模块),其中有很多类似的东西

readParamString(Object params, int index) 

他们在那个class级有10个领域

 final static int PARAM1 = 1 ... final static int PARAM10 = 10 

与readParam函数一起使用

但你也可以像readParamString(o, 1);一样使用普通的int readParamString(o, 1);

最终的静态int比使用普通的int更好吗?

通过声明final static int,您将对int变量有一个引用。更重要的是,一旦声明为final,就无法更改int的值。 如果int不是final,那么您可以更改变量的值。 因此,如果您不想通过输出代码更改变量值,那么您可以使用final static int。

声明静态最终常量的一个优点是防止在代码中多次引用相同的文字值,这可能会导致不必要的变化; 例如,如果程序员无意中更改了一个文字而没有改变其他文字。

在您的示例中,我将询问使用值1声明常量PARAM1的值,尤其是如果它对包含类是私有的并且仅引用一次。 但是,如果字面值有一些语义含义,那么它可能更有用; 例如

 public static final int LOAD_ACTION = 1; public static final int SAVE_ACTION = 2; public static final int DELETE_ACTION = 4; public static final int MOVE_ACTION = 8; 

但是,通常会使用枚举而不是此方法。

那太傻了。

提取数字常量的原因是为它们提供一个有名的名称。 PARAM1..PARAM10不是很有说服力。

在您给出的示例中,我会说具有命名值并不比直接使用int更好。 参数是一个计数,因此参数的int表示与指定版本一样具有描述性。

这似乎有点像我偶尔遇到的C代码有类似的东西

 #define ZERO 0 #define ONE 1 

真的没什么意义。 事实上,当我看到使用这些名称时(而不是在我看到定义时),我很想跳到定义以确保名称不是说谎(这是很长很长一段时间,但是,我实际上遇到过将FALSE定义为1,-1或非零的代码,例如,这真的非常糟糕。


编辑:第二次看,似乎名称可能指示第一个参数中哪个字段是感兴趣的,在这种情况下名称可能更有意义 – 只要名称与字段有一些有意义的联系而不仅仅是数字偏移量。 很难说是否是这种情况,因为你可能会解释你正在使用的代码。

是某种方式比使用普通的int更好

但是,如果您使用的是Java 5或更高版本,则enum优于final static变量。

我认为最终的静态变量并没有完成,而是要说出名字。 因此,即使是PARAMETER1也不仅仅是1 。 因此,在阅读代码时可以提高理解力。

也许是因为变量是由编译器内联的。