Test obj1=Test.getInstance("OBJ1");public static Test getInstance(String str)
{
    objTest=new Test(str);
    return objTest;
}为什么产生一个实例? 给个理由先不管怎样,当你使用objTest = new Test(str);的时间就要重新分配存储空间,重新产生对象既然是重新产生的对象,那么 obj1 和 obj2的地址肯定不同,obj1 == obj2 = false你可以这样写
public static Test getInstance(String str)
{   if(objTest == null) {
        objTest=new Test(str);
    }
    return objTest;
}那么就只有一个实例,呵呵

解决方案 »

  1.   

    一个类的静态变量是只有一个,我们这样来测试你就清楚了Test obj1=Test.getInstance("OBJ1");
    System.out.println("obj1.objTest = " + obj1.objTest); // OBJ1
    System.out.println("obj1.hashCode() =" + obj1.hashCode()); // 25358555
    Test obj2=Test.getInstance("OBJ2");
    System.out.println("obj1.objTest = " + obj1.objTest); // OBJ2
    System.out.println("obj2.objTest = " + obj2.objTest); // OBJ2
    System.out.println("obj1.hashCode() =" + obj1.hashCode()); // 25358555
    System.out.println("obj2.hashCode() =" + obj2.hashCode()); // 26359644以上hashCode的的值可能不同,但是能保证obj1的hashCode()不等于obj2.hashCode()这个是表明obj1和obj2在 objTest=new Test(str); 的时间都获得的地址
    而obj1.objTest最终 equals(obj2.objTest) 是因为一个类的静态变量只有一个地址
      

  2.   

    但是一个类的静态变量不是只存在一个实例的吗?
      这话没错,错就是你的objTest始终是最后一次使用getInstance()时的,以前New 的东西都丢在内存里了