最终关键字的工作原理

问题:

在Java中,我们使用final关键字与变量来指定其值不被更改。
但是我看到你可以改变类的构造函数/方法中的值。再次,如果变量是static,那么这是一个编译错误。
这是代码:

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}

以上代码工作正常,没有错误。
现在将变量更改为static

private static final List foo;

现在是一个编译错误。这个final真的有效吗?

回答:

您始终可以initialize final变量。编译器确保只能执行一次。
请注意,存储在final变量中的对象上调用方法与final的语义无关。换句话说:final只是关于引用本身,而不是引用对象的内容。
Java没有对象不变的概念;这是通过精心设计的对象来实现的,是一项非常琐碎的工作。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How final keyword works

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

75 + = 77