2012-01-18 137 views
1

Java中有不可變類型。如果您將不可變對象傳遞給方法,則在調用該方法後,即使該方法中的值已更改,該對象也不會更改。我知道所有的基元都是不變的。 String也是不可變的。
我寫了一個簡單的代碼來檢查Java中的功能,看起來基元的包裝類也是不可變的。任何人都可以在java中列出所有不可變類型?java中的所有不可變類型

+3

原語不是不可變的。 「在他們接受某種方法後他們沒有改變」這一事實是因爲他們是通過價值傳遞的,而不是因爲不可改變。 – amit 2012-01-18 06:54:38

+0

類似的問題:http://stackoverflow.com/questions/5124012/examples-of-immutable-classes – Azodious 2012-01-18 06:56:08

+0

什麼理由知道這個列表? – Dapeng 2012-01-18 06:58:11

回答

4

它不會調用該方法時,即使它的價值在該方法改變後,被改變

與無法改變無關。

void change(SomeType st) { 
    st.setValue(123); 
} 

將改變真實的東西。雖然

void change(SomeType st) { 
    st = new SomeType(123); 
} 

不會。這裏的區別在於您是在更改引用還是在引用的對象上進行操作。

字符串和那些包裝類被稱爲immutable,因爲絕對沒有成員函數可以更改該對象,如setValue

希望你明白這一點。如果您有任何疑問,您可以自由發表評論和詢問。

+0

我明白了,非常感謝。 – shift66 2012-01-18 07:01:32

-1

在jdk中提供的任何用於保存原始值的類都應該通過此列表。

示例 - 整數,長整數,雙整數,字符串等。

+0

在Java中,原始類型是可枚舉的:byte,short,int,long,char,float,double,bool。原始的和不變的是兩個完全不同的東西。 – Haozhun 2012-01-18 07:03:39

+0

@Gene,你誤解了陳述。任何一個表示原始值的類...我希望現在你明白了。 – 2012-01-18 07:07:19

+0

我還沒有明白你的觀點。對不起。但是,downvote由於超時而被鎖定,現在我無法更改它。抱歉。 – Haozhun 2012-01-18 07:11:03

1

不,這是不可能的。

每個人都可以加入自己穩定的類型,我敢肯定每個不同版本的Java引入了一些新的

+0

是的我知道,我在谷歌搜索。我想知道所有已知的不可變類型。例如Integer。每個人都可以使用這種類型。看起來URI也是不可變的。它是否正確? – shift66 2012-01-18 06:59:40

+0

@Ademiban:它在哪裏結束?每個人都可以使用Apache公共資源,如果不可變更也列出來了?> – amit 2012-01-18 07:04:10

+0

javadoc擁有所有的信息。來自URI javadoc:這個類的實例是不可變的。所以是的URI是不可改變的 – Peter 2012-01-18 07:05:48