private Object readResolve(){ return ourInstance; } And private Singlton readResolve(){ return ourInstance; } when i used Singlton as return type it is giving different value for singleton1 and singleton for bellow code Singleton singleton = deserializeSingletonInstance(byteArrayOutputStream); Singleton singleton1 = deserializeSingletonInstance(byteArrayOutputStream);