在创建日期对象时,我应该使用“final”修饰符吗?

6

可能是重复的问题:
何时应该使用final?

Java程序员何时应该倾向于使用final关键字?

final Date now = new Date();

over

Date now = new Date();

这取决于你想如何使用它。在大多数情况下,我真的认为这并不重要。 - ahodder
1
同意aix的观点 - 使用finalDate变量无关。 - Andrzej Doyle
我之前没有表达清楚我的兴趣点...这个链接https://dev59.com/dXVC5IYBdhLWcg3whRgw 就是我想要的... - Zango
5个回答

8

除了决定变量是否应该是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 是不可变的,不会改变(引用和值)。

那些setter方法已经被弃用了,但你是对的,它们仍然可以被调用。你的回答是我迄今为止看到的唯一正确的答案。1+1 - Hovercraft Full Of Eels

3

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


1
问题是什么是优势,而不是最终结果。 - TheBlastOne

2
当你使用final关键字时,你永远无法改变变量的值。对于日期也是如此。

1
如果您声明一个只读字段,并且想要使类线程安全,则应该使用final修饰符。有时,如果变量在匿名类中使用,您必须将其设置为final。在所有其他情况下,这并不真正重要。

1

最终变量只能被显式初始化一次。声明为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关键字。

在计算机科学中,编程是指通过编写代码来创建计算机程序的过程。编程语言是一种人为设计的语言,用于将人类思想转换成计算机可理解的形式。常见的编程语言包括C、Java、Python和JavaScript等。编程可以应用于各种不同的领域,包括软件开发、网络安全、数据分析、游戏设计和人工智能等。随着技术的进步和需求的增长,编程已经成为一种非常有前途的职业领域。 - Radu Murzea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接