public class Singleton2 {
private static  Singleton2 instance2 = null;
public static synchronized  Singleton2 getInstance() {
if(instance2 == null) {
return new Singleton2();

return instance2;
}
}public class Test { public static void main(String[] args) {
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println("s3 = " + s3);
System.out.println("s4 = " + s4); }
}
输出结果:
s3 = com.singleton.Singleton2@9cab16
s4 = com.singleton.Singleton2@1a46e30对上面的输出结果不解,这是在单例模式代码中看到的!

解决方案 »

  1.   

    if(instance2 == null) { 
    return new Singleton2(); 

    这里改成
    if(instance2 == null) { 
    instance2 = new Singleton2(); 
      

  2.   

    if(instance2 == null) {
    return new Singleton2();

    这个是有问题的。改成这样:
    if(instance2 == null) {
    instance2 = new Singleton2();
      

  3.   

    return new Singleton2(); 这条语句的问题
      

  4.   

    return new Singleton2(); 是指实例化一个对象,仅实例化一次,
    你的成员变量instance2 始终没有被赋值,所有instance2永远都是null,
    第2次调用方法 必然会重新 new Singleton2(); 形成新对象
      

  5.   

    你的代码存在两个问题:public class Singleton2 {    private static Singleton2 instance2 = null;    // 问题一:没有将默认构造改为 private,否则的话可以使用 new 产生对象,
        // 这样的话这个单例就没有意义了,加上:
        private Singleton2() {
        }    public static synchronized Singleton2 getInstance() {
            if(instance2 == null) {
                // 问题二:这里的问题前面楼层已经指出了,这里就不再赘述了
                return new Singleton2();
            }
            return instance2;
        }
    }public class Test {    public static void main(String[] args) {
            Singleton2 s3 = Singleton2.getInstance();
            Singleton2 s4 = Singleton2.getInstance();
            System.out.println("s3 = " + s3);
            System.out.println("s4 = " + s4);
        }
    }// 为了避免同步锁带来的性能开销,建议改成这样:public class Singleton2 {    private static Singleton2 instance2 = new Singleton2();    private Singleton2() {
        }    public static Singleton2 getInstance() {
            return instance2;
        }
    }
      

  6.   


    有问题 你的逻辑有点问题 instance2一直都是NULL 始终没被初始化 走符合条件的流程也不给他初始化