2017-10-14 127 views
1

我正在創建Box類的一個對象(bb),並將其存儲到其屬性值爲25。該對象將被創建並且它將具有內存。現在,我想要創建Box類的新實例,但是我希望它將其指向爲bb創建的同一對象,而不是再次分配新內存。例如,如果寫入Box cc new框();並打印出cc.value它應該打印25.它不應該分配新的內存。這是每次我們創建對象時它應該參考bb。例如Box newOne = new Box(); newone.value應該給我們25.這可能嗎?我不知道我是否很好地描述了這個問題。我最近在考試中遇到了這種類型的問題。如何創建一個類的單個實例並多次使用它?

Box bb = new Box(); 
bb.value = 25; 
Box cc = new Box();//It should not allocate new memory it should refer to 
//the previous memory that we used for bb. 
System.out.println(cc.value);//It should give us 25 

class Box{ 
    int value; 
} 
+0

它被稱爲'Singleton Pattern'。你可以看看這個問題的更多信息:https://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java – endertunc

+0

使值屬性static(即:'static int value;') – davidchoo12

回答

2

這應該回答你的問題:

Box box = new box(25); 
Box box2 = box; 

由於BOX2是不是一個新的對象,它會參考在內存中創建的第一個。

1

現在我想創建Box類的新實例,但我不想 分配新的內存給它,我想instatiate對於BB

這是沒有意義的創建同一個對象 。
要麼你實例化一個新的對象,並在內存中您通過分配相同的對象,以多個變量重複使用相同的對象分配一個新的對象。

1)如果你想創建不多於Box的實例,你可以使用單例模式。

public class Box{ 

    private Box box = new Box(); 
    public int value; 

    private Box(){ 
    } 

    public static Box of(){ 
     return box; 
    } 
} 

並以這種方式使用它:

Box bb = Box.of(); 
bb.value = 25; 
Box cc = Box.of(); 
System.out.println(cc.value); 

2)如果你想擁有的Box所有實例之間共享的單一value領域,使這一領域static

public class Box{ 

    public static int value; 
    ... 
} 

並以這種方式使用它:

Box bb = new Box(); 
bb.value = 25; 
Box cc = new Box(); 
System.out.println(cc.value); 

它不會避免創建Box的多個實例,但它會爲int value字段分配一個分配。

+0

您可以創建可以共享相同數據的不同實例。顯然,對於單個「int」沒有意義,但想象它是一個巨大的'int []'。這可以在構造函數中傳遞,以便兩個不同的實例可以有效地「共享內存」。 – lexicore

+0

@lexicore當然這是有效的。如果該字段在所有實例之間共享,則使用靜態也是一種選擇。 – davidxxx

相關問題