JAVA String 源碼分析與final關鍵字

String不可變的是參考這裏。
http://www.2cto.com/kf/201401/272974.html
String 不可變得一個重要緣由是由於String被聲明成了final類,可是觀察Stringbuffer也被聲明成了final類。因此,String 不可變得緣由不是由於其在聲明的時候聲明生了final,而是在各類方法的內部都是return了一個新的對象,因此String是不可修改的。
final關鍵字在聲明一個對象時有兩種用法,第一種,在使用這個類的時候聲明,就像這樣:html

javapublic class Day01 {
    private static final List Loans = new ArrayList();
    public static void main(String[] args) {
    Loans.add("xxx");
        Loans = new Vector(); //不合法
    }
}

能夠向對象加數據。可是不能使他的引用指向另一個對象。
第二種,在定義這個類的時候使用final關鍵字:
好比這種:java

javapublic final class String{

}

他僅僅表示不能被繼承。可是他的引用依然可以指向其餘的對象:ide

javaString   a="ccc";
     a="bbbb";

一個例子:this

javapublic  final  class HelloWorld {
    private  String  name;
    private  String  age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "HelloWorld [name=" + name + ", age=" + age + "]";
    }
}
public class Day01 {

    private static final List Loans = new ArrayList();


    public static void main(String[] args) {
         HelloWorld  a=new HelloWorld();
         a.setName("x");
         a=new  HelloWorld();
         a.setName("y");
    }

}

在定義類的時候聲明這個類是final的,可是它的引用依然能夠指向別的對象。所以,定義類使用final關鍵字與在類中間聲明一個是對象成員變量是final的做用是不同。code

相關文章
相關標籤/搜索