Java Singleton具有不同的toString()值

时间:2014-05-18 00:07:33

标签: java singleton

我有一个用java实现的经典单例

public class ClassicSingleton {

   private static ClassicSingleton instance = null;

   private ClassicSingleton() {} ;

   public static ClassicSingleton getInstance() {
        if (instance == null)
            return new ClassicSingleton();
        return instance;
   }
}

我有以下驱动程序

public class SingletonDriver {

    public static void main(String[] args) {
        System.out.println(ClassicSingleton.getInstance().toString());
        System.out.println(ClassicSingleton.getInstance().toString());
    }
}

输出类似于

ClassicSingleton@75e4f66a
ClassicSingleton@aede59e

我认为输出会指向同一个对象。这些值不应该相同吗?

2 个答案:

答案 0 :(得分:5)

您忘记将new ClassicSingleton()分配给instance,因此您实际上有一个工厂而不是一个单身人士;你将在每次通话时创建一个新实例。 (当然,请注意,这不是线程安全的。)

答案 1 :(得分:5)

您对getInstance()的实施是错误的。您永远不会初始化instance,因此会在每次调用时返回一个新实例。如果instancenull,则应将其保存到您的数据成员,然后才返回:

public static ClassicSingleton getInstance() {
    if (instance == null)
        instance = new ClassicSingleton();
    return instance;
}