50,639
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
public class Singleton {
private Singleton() {
}
private final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
Singleton obj = Singleton.getInstance();
Singleton obj1 = Singleton.getInstance();
Singleton obj 2= Singleton.getInstance();
那么实际上obj1,obj2和instance都是同时持有一个对象吗[/quote]
这个时候obj1和obj2持有的都是instance所持有的对象
Singleton obj1 = Singleton.getInstance();
Singleton obj 2= Singleton.getInstance();
那么实际上obj1,obj2和instance都是同时持有一个对象吗[/quote]
是的,
由于是静态方法,所以只创建一次Singleton;
obj1和obj2存储在栈里,指向堆中的Singleton实例;
instance存储在data seg里,也指向堆中的Singleton实例;
代码:
private static final Singleton instance = new Singleton();
Singleton obj1 = Singleton.getInstance();
Singleton obj 2= Singleton.getInstance();
那么实际上obj1,obj2和instance都是同时持有一个对象吗
private final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
这个代码就是在本类中创建了一个对象new Singleton()然后把这个对象的引用(就是对象在堆内存中的地址值)给了instance,
然后再通过getInstance()这个方法把instance持有的引用给了调用此方法的人,也就是obj(注意这个变量名是Singleton类类型的),obj只是和instance同时持有了new Singleton()这个对象的引用,而不是obj也创建了一个对象。
Singleton obj = Singleton.getInstance();