我有一个代码ManagerService,可以打印实例boss1和boss2。两者都具有相同的哈希码。我怎么才能知道哪个boss是boss1还是boss2。我无法说出来,因为实例是相同的,因此哈希码是相同的。如何知道是哪个老板。
public class ManagerService {
private static ManagerService managerservice;
private ManagerService(){
System.out.println("manager created");
}
public static ManagerService getInstance() {
if (managerservice==null){
managerservice = new ManagerService();
}
return managerservice;
}
public void doWork(){
System.out.println("Manager is working");
System.out.println(managerservice.hashCode());
}
}
测试类
public class ManagerServiceTest {
public static void main(String[] args) {
ManagerService boss1 = ManagerService.getInstance();
boss1.doWork();
ManagerService boss2 = ManagerService.getInstance();
boss2.doWork();
}
}
答案 0 :(得分:5)
单例模式的想法是存在单个对象。您只有一个ManagerService
对象,您可以通过
System.out.println(boss1 == boss2);
将打印true
,表示它们是完全相同的单个对象。
至于boss1
和boss2
,它们只是变量名称。就像你的母亲可能会把你称为"我的宝贝"而你的父亲就是那个小小的孩子,只有你们中的一个人。
答案 1 :(得分:0)
单例模式的整个想法是只有这个类的一个实例。所以很自然他们会有相同的hashCode()。请注意,尽管在多线程环境中的实现中,您可以创建多个实例。所以你应该使用锁来防止这种情况发生。您还需要将构造函数设为私有。