可能是重复的问题:
何时应该使用final?
Java程序员何时应该倾向于使用final关键字?
final Date now = new Date();
over
Date now = new Date();
可能是重复的问题:
何时应该使用final?
Java程序员何时应该倾向于使用final关键字?
final Date now = new Date();
over
Date now = new Date();
除了决定变量是否应该是final的(这在其他帖子中已经涵盖),我认为使用final Date now = ...
存在问题,尽管对now的引用不会改变(它是final的),但它的值可能会改变。因此,我认为这可能会给那些不知道Date是可变的开发人员带来一些误导。
例如,你可以这样写:
public static void main(String[] args) {
final Date now = new Date();
System.out.println(now);
now.setHours(5);
System.out.println(now);
}
并从你的最终日期中获取2个不同的日期...
现在这对于任何可变变量都是真实的(final List<String> l
的内容也可能会改变),但我认为在日期的情况下,假设不可变性太容易了。
更好的解决方案是使用joda时间库:
final DateTime now = new DateTime();
now
是不可变的,不会改变(引用和值)。在Java中,final
变量是一种一旦赋值就不能更改值的变量。当你声明一个变量为final
时,这个变量将被分配一个值,并且您永远不需要更改该值。
final
修饰符。有时,如果变量在匿名类中使用,您必须将其设置为final。在所有其他情况下,这并不真正重要。最终变量只能被显式初始化一次。声明为final的引用变量永远不能被重新分配到不同的对象。
但是,对象内部的数据可以被更改。因此,对象的状态可以被更改,但引用不能。
对于变量,final修饰符通常与static一起使用,以使常量成为类变量。 例如:
class Test{
final int value=10;
// The following are examples of declaring constants:
public static final int BOXWIDTH = 6;
static final String TITLE = "Manager";
public void changeValue(){
value = 12; //will give an error
}
}
final
与Date
变量无关。 - Andrzej Doyle