空白的最终变量用于创建不可变对象

时间:2017-05-11 11:10:51

标签: 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);

      b.a=23;         // b object's a member is changed even though b is 
                      // blank final 

      System.out.println(b.a);

   }     
 }

2 个答案:

答案 0 :(得分:2)

b最终的事实只会阻止您为b(在初始初始化之后)分配新值。它不会阻止您调用B的方法来改变b引用的对象的状态,或者直接改变b引用的对象的实例变量(即b.a = ...)。

答案 1 :(得分:1)

B b的引用是最终的,无法更改。当您尝试更改数据字段b.a的值时,它将允许您这样做,因为它不会更改该引用。