2012-04-02 98 views
5

可能重复:
When should one use final?创建Date对象时,我应该使用“final”修饰符吗?

时候应该Java程序员喜欢用

final Date now = new Date(); 

Date now = new Date(); 
+0

这取决于你想如何使用它。在大多数情况下,我真的不认为这很重要。 – AedonEtLIRA 2012-04-02 16:22:43

+1

与aix一致 - 没有关于使用'final'的特定于'Date'变量的内容。 – 2012-04-02 17:13:55

+0

我不太清楚我对什么感兴趣...这是http://stackoverflow.com/questions/266806/is-there-any-performance-reason-to-declare-method-parameters-final-in-java是我想要的... – Zango 2012-04-03 08:13:59

回答

7

除了决定一个变量是否应该是最终的或其他职位所涵盖的内容之外,我认为final Date now = ...的问题在于,虽然现在的引用不会改变(它是最终的),但它的值可能是这样。所以我觉得这对于不知道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内容也可以改变)但我认为在日期的情况下,假定不变性太容易了。

更好的解决方案将是使用约达时间库:

final DateTime now = new DateTime(); 
在这种情况下

now是不可改变的,不会改变(参考&值)。

+0

这些设置方法已被弃用,但您说得对,可以调用它们。您的是迄今为止唯一正确的答案。 1 + – 2012-04-02 16:25:30

2

当你使用final关键字时,你永远不能改变变量的值。同样适用于日期。

3

在Java中,变量final是一个变量,它的值一旦被赋值就不能改变。当变量被分配一个值时,你声明一个变量final,并且你永远不需要改变该值。

+1

问题是什么将是优点,而不是最终的。 – TheBlastOne 2012-04-02 16:24:29

1

最终变量只能被显式初始化一次。声明为final的引用变量永远不能被重新分配以引用不同的对象。

但是,对象内的数据是可以改变的。所以对象的状态可以改变,但不能引用。

对于变量,最终修饰符通常与静态一起使用以使常量成为类变量。 例子:

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 
    } 
} 

,如果你的要求是这种类型比你可以用与最终日期。

+0

前2段为+1 :)。 – 2012-04-02 16:34:03

1

如果要声明领域,这是只读的,和你想有一个类线程安全的 - 那么你应该使用final修改。有时候如果在匿名类中使用它,你会被迫做一个变量final。在所有其他情况下,这并不重要。