2013-09-23 46 views
4

從有效的Java書中,它指出「對象總是可以重用,如果它是不可變的」。所有不可變對象是否可重用?

String s = "shane"; 
String p = "shane"; 

此版本使用single String instance,而不是創建每次執行一次新的 。此外,保證該對象將被 重複使用,在相同的虛擬機中運行的任何其他代碼恰好包含相同的字符串文字。

下面的最後一個類也是不可變的嗎?點對象是否可以重新使用?

public final class Point { 
    private final int x, y; 

    public Point(int x, int y) { 
    this.x = x; 
    this.y = y; 
    } 

    public int getX() { return x; } 
    public int getY() { return y; 
} 

任何人都可以提供我在哪裏它的對象/實例可以被重新使用上述immutable class的一例?我只是對可重用性如何發生感到困惑?

我能夠與StringInteger類關聯,但不能與用戶定義的類關聯。

+0

'不可變類==不可變對象' –

+1

它*可以被重用,但只能保證字符串類。 – Blorgbeard

回答

0

重新使用簡單地意味着更改「參考」變量值。 例如int可以被重用並且其值改變 數據類型有點不同,參考變量例如使用「新」instane被重新啓動,例如, myframe = new JFrame() 聲明爲「final」的變量是「常量」並且是可變的。

上面的類本身要求其引用變量在啓動時被聲明爲「可變」,儘管它的內容是有效可變的,難度是其中(變量或類定義)部分的上下文定義是可變的。

0

不變性意味着當一個對象被創建時,它在創建時的狀態將會貫穿它的生命。並且是你展示的類和該類的對象是不可變的。因爲您在構造函數中初始化狀態,並且沒有設置器 關於重用是的,您可以在需要Point類型的對象的情況下重複使用同一個對象,但爲此目的,只要它是爲@James 建議您可以使用工廠創建對象,並且工廠可以決定是否需要創建新對象或在您要求Point對象時使用現有對象。

+0

這對一些標點符號和幾行換行符來說會更好一些。 – Blorgbeard

相關問題