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;
}那么就只有一个实例,呵呵
{
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;
}那么就只有一个实例,呵呵
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) 是因为一个类的静态变量只有一个地址
这话没错,错就是你的objTest始终是最后一次使用getInstance()时的,以前New 的东西都丢在内存里了