Java 空白的最终变量用于创建不可变对象
我知道空白变量用于在java中创建不可变对象,即其成员不能更改的对象 下面几行代码是如何毫无问题地工作的Java 空白的最终变量用于创建不可变对象,java,final,Java,Final,我知道空白变量用于在java中创建不可变对象,即其成员不能更改的对象 下面几行代码是如何毫无问题地工作的 import java.util.*; class B { int a; } public class BlankFinal { public static void main(String args[]) { final B b; b=new B(); b.a=1; System.out.println(b.a
import java.util.*;
class B
{
int a;
}
public class BlankFinal
{
public static void main(String args[])
{
final B b;
b=new B();
b.a=1;
System.out.println(b.a);
b.a=23; // b object's a member is changed even though b is
// blank final
System.out.println(b.a);
}
}
b
是final这一事实只会阻止您(在初始初始化之后)将新值分配给b
。它不会阻止您调用B
的方法来改变B
引用的对象的状态,或者直接改变B
引用的对象的实例变量(即B.a=…
)。对B
的引用是最终的,不能更改。当您尝试更改数据字段b.a
的值时,它将允许您这样做,因为它不会更改该引用。几乎正确,但是final int a
如果不在构造函数中初始化它将不起作用。但是您可以在构造函数外对其进行初始化(在BlankFinal中),但重新分配将不起作用。正确,但就目前情况而言,它无法编译。我的错误,没错,编辑了答案。谢谢如果你的包是最终的,这意味着你不能把它换成另一个包。这并不意味着你不能把东西从袋子里拿出来,也不能把新东西放进去。很好的类比,谢谢