可能重复:
private final static attribute vs private final attribute静态最终变量
什么是变量声明为
static final int x = 5;
或
final int x = 5;
之间的区别
如果我只想将变量设为本地,并且常量(以后不能更改)?
谢谢
可能重复:
private final static attribute vs private final attribute静态最终变量
什么是变量声明为
static final int x = 5;
或
final int x = 5;
之间的区别
如果我只想将变量设为本地,并且常量(以后不能更改)?
谢谢
只是最后会有预期的效果。
声明静态正在成为一个类变量,这将是通过类名<ClassName>.x.
在第一条语句定义变量,它通用于所有对象(类静态字段)进行访问。
在定义变量的第二个语句,属于每个创建的对象(很多拷贝)。
在你的情况,你应该使用的第一个。
声明的字段作为“最终”将确保字段是一个常数,不能改变。 区别在于使用'static'关键字。
声明一个字段为静态意味着它与类型和不与实例相关联。即对于所有对象只有一个字段副本存在,而不是每个对象的单个副本。 因此,可以通过类名访问静态字段。
正如你所看到的,你的要求,即场应该是恒定的在这两种情况下(声明字段“最终”和“静最终”)的实现。
类似的问题是private final static attribute vs private final attribute
希望它可以帮助
对于基本类型,在“最后的静态”将是一个适当的声明来声明一个常量。当它是一个对象的常量引用时,非静态的最终变量是有意义的。在这种情况下,每个实例都可以包含自己的引用,如JLS 4.5.4所示。
见帕维尔对正确答案的响应。
如果这是一个变量(而不是字段),它根本不能是静态的。 – Thilo
这已经在此[问题]中讨论过(http://stackoverflow.com/questions/1415955/private-final-static-attribute-vs-private-final-attribute)。 –
这与当前标记不重复。这个问题是关于在方法局部变量中使用“static final”的问题,链接问题将它用作类/对象变量(在任何方法定义之外)。我认为答案是,在方法中使用“final”可以做到人们可能期望的“静态最终”在大多数情况下在这种情况下做的事情。然而,我想知道如果它是一个对象而不是一个整数,如果可变性可能产生不同于这种直觉的结果。我没有测试过这个。有人知道吗? – Apriori