2017年6月21日 星期三

Java概念: mutable v.s. immutable

在學習Java語言時,常常聽到人家說mutable和immutable,到底是甚麼意思呢?如果從字面上的意思來說的話,mutable代表可改變的,immtable代表不可改變的,還是很抽象,對吧!,就讓我們用實例來說明吧!


有四個名詞要認識mutable value,immutable value,mutable reference,immutable reference,就讓我一一來說明吧!


1. mutable reference point to immutable values:
   舉例來說:
   String s1="a";
   這個宣告代表我們創建一個名叫s1的reference,它指向一個String type的物件,名為"a", 而reference指向可以改變,但物件的值不能改變
   所以以下code的輸出結果會是a,因為s2已經指向了"a"這個物件,而物件的值不能被改變
    String s1="a";
    String s2=s1;
    s1="b";
    System.out.println(s2);
 2. immutable reference point to mutable values
    final StringBuilder s= new StringBuilder("hello");
    final 在這裡的用法和C++ const(點擊可參考我之前文章)類似,意思就是指向不可變,也就是s永遠都要指向"hello"這個物件,但我們可以改變"hello" 這個 StringBuilder  類型物件的值


總結:
mutable value: 值可以改變
immutable value: 值不能改變
mutable reference: 可以指向其他地方
immutable reference: 不可以指向其他地方


參考資料:
1. edx course: MITx: 6.005.1x Software Construction in Java
2. https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

3 則留言: