class FinalVariable {
    final String s2;
    
    FinalVariable() {          //#1
        s2 = "s2";
    }
    
    FinalVariable(String s) { //#2
        new FinalVariable();
        s2 = "s2";
    }
    
    FinalVariable(double d) { //#3
        this();
//        s2 = "s2";
    }
}
谁可以告诉我为什么#2处可以给final变量再次赋值而#3又不行,两者有什么区别,谢谢!

解决方案 »

  1.   

    因为最后第三行的 this(); 调用构造器FinalVariable(),已经初始化了s2,不能再对s2赋值
    #2处的new FinalVariable() 是创建了一个新的对象,没有对现有的s2赋值,所以可以s2赋值
      

  2.   

    难道new FinalVariable()创建一个新的对象时,没有调用无参的构造函数(#1)吗,如果有的话#1中不是也初始化了s2了吗
      

  3.   

    你在#2中的new FinalVariable()是创建了另外一个对象,而不是创建本对象。
    比如:你前面的人叫:下一个,那就是轮到你,然后你也叫“下一个”,那是叫下一个人,而不是你
      

  4.   

    happyegg(放松放松) 
    说的好,呵呵~~~~~~~``
      

  5.   

    因为final变量只可以有一次初始化,编译器认为在this()中可能已经对s2初始化了,所以不允许这样做。
      

  6.   

    你在#2中的new FinalVariable()是创建了另外一个对象,而不是创建本对象
    就是,这个对象是在 方法里创建的,而不是你用new 创建的