2017-10-14 234 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

相关问题