2012-06-07 53 views
-1

可能重複:
Mutable vs immutable objectsJava的:當你選擇,讓您的類不可變了可變

我理解VS可變對象不可變對象之間的優劣,但怎麼辦你決定哪一個去設計它。

我之所以問這個問題,是因爲如果它是可變的,只需將對象更改爲初始狀態即可高效且經濟地重用對象,因此,當您處理多步操作時,您可以重複使用它一遍又一遍。鑑於不可變對象性能在執行多步操作時被放大,因爲它在每個步驟都會生成一個新對象。 < - 至於內存是關注

這裏的例子:

//Mutable 
    A a = new A(); 
    for(int j = 0 ; j < 1000 ; j++){ 
     a.setP1(j); 
     //do something 

    } 

    //Immutable 
    for(int j = 0 ; j < 1000 ; j++){ 
     A a = new A(j); 
     //do something 
    } 

我知道不可變對象是THEAD安全的,沒有同步要求,簡單和共享內部,但有這些身邊的任何特殊原因?我們應該什麼時候讓我們的課程成爲最終的(不可變的)?

+1

可能幫助:http://programmers.stackexchange.com/search?q=mutable – Jeremy

+2

http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects –

回答

0

我使用一成不變的對象時:

  1. 在多線程環境中工作,不可變對象是完美的跨線程通信(消息)
  2. 當一個對象不成立,其中它的成員變量沒有狀態改變應用程序的生命週期。例如,用戶憑證
1

您對可變性的推理主要是針對對象池與創建。除非出於某些非常具體的原因,創建對象非常昂貴,或者需要嚴格控制實例的數量(如db連接和線程池),否則這是造成對象可變的一個糟糕原因。

這是一種在Java早期使用的技術,現在已經被忽視了。讓VM和垃圾收集器完成它的工作併爲其用例設計代碼,而忽略這種USUALLY'虛構'優化。