Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要将对final类实例的引用声明为final?_Java_Oop_Immutability_Final - Fatal编程技术网

Java 为什么要将对final类实例的引用声明为final?

Java 为什么要将对final类实例的引用声明为final?,java,oop,immutability,final,Java,Oop,Immutability,Final,第二行的意义是什么: public final class A {} final A obj1=new A(); 如果A已经是不可变的,为什么要将obj1设为final?(只是为了让它粘到一个唯一的内存引用?) 第一行中的final表示对象已关闭以进行扩展…即。您不能将其子类化 第二行中的final表示您不能重新分配变量。首先,A不是不可变的,您只需声明它final 那么,最终的变量就不能改变了。如果obj1是一个字段,这将强制执行可变性(与最终类不同) 如果它是一个局部变量,则意味着您可以在

第二行的意义是什么:

public final class A {}
final A obj1=new A();

如果
A
已经是不可变的,为什么要将
obj1
设为final?(只是为了让它粘到一个唯一的内存引用?)

第一行中的final
表示对象已关闭以进行扩展…即。您不能将其子类化


第二行中的
final
表示您不能重新分配变量。

首先,
A
不是不可变的,您只需声明它
final

那么,最终的变量就不能改变了。如果
obj1
是一个字段,这将强制执行可变性(与
最终类不同)


如果它是一个局部变量,则意味着您可以在匿名类中安全地使用它(否则编译器无法确保它在执行匿名类主体之前/期间不会得到更改)

示例代码中的任何内容都不意味着不变性。