Let's me sum up :)
The essential difference is: The existence form of a singleton is an object, static is not. This conduced the following things:
- Singleton can be extended. Static not.
- Singleton creation may not be threadsafe if it isn't implemented properly. Static not.
- Singleton can be passed around as an object. Static not.
- Singleton can be garbage collected. Static not.
- Singleton is better than static class!
- More here but I haven't realized yet :)
Last but not least, whenever you are going to implement a singleton, please consider to redesign your idea for not using this God object (believe me, you will tend to put all the "interesting" stuffs to this class) and use a normal class named "Context" or something like that instead.