【发布时间】:2016-10-21 00:12:44
【问题描述】:
我正在尝试创建一个单例类,但它每次都会返回一个新实例。这是我的代码。
我做错了吗?为什么每次都返回一个新实例?
应该和我想的一样。
public final class SingletonA {
private static SingletonA instance;
private SingletonA(){
}
public static SingletonA getInstance() {
if(instance==null)
{
System.out.println("RETURNING NEW INSTANCE OF SingletonA Class");
return new SingletonA();
}
System.out.println("RETURNING OLD INSTANCE OF SingletonA Class");
return instance;
}
}
public class SingletonB {
public static void main(String[] args) {
SingletonA one = SingletonA.getInstance();
System.out.println("1."+one+" | "+one.hashCode());
SingletonA two = SingletonA.getInstance();
System.out.println("2."+two+" | "+two.hashCode());
SingletonA three = SingletonA.getInstance();
System.out.println("3."+three+" | "+three.hashCode());
}
}
// HERE IS THE OUTPUT
RETURNING NEW INSTANCE OF SingletonA Class
1.oop.singleton.SingletonA@2a139a55 | 705927765
RETURNING NEW INSTANCE OF SingletonA Class
2.oop.singleton.SingletonA@15db9742 | 366712642
RETURNING NEW INSTANCE OF SingletonA Class
3.oop.singleton.SingletonA@6d06d69c | 1829164700
【问题讨论】:
-
什么时候给
instance分配一个非空值? -
必须将第一行中的实例分配给 = new SingletonA() 而不是每次都返回 new SingletonA()。