Java Singleton具有不同的toString()值

bhe*_*ler 0 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

我有以下驱动程序

public class SingletonDriver {

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

输出就像是

ClassicSingleton@75e4f66a
ClassicSingleton@aede59e
Run Code Online (Sandbox Code Playgroud)

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

chr*_*ke- 5

你忘了分配new ClassicSingleton()instance,所以你确实有一个工厂,而不是一个单; 你将在每次通话时创建一个新实例.(当然,请注意,这不是线程安全的.)


Mur*_*nik 5

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

public static ClassicSingleton getInstance() {
    if (instance == null)
        instance = new ClassicSingleton();
    return instance;
}
Run Code Online (Sandbox Code Playgroud)