I'm not sure I have the elegance to properly answer this, but...
- An Object is an instance of a Class, it is stored some where in memory
- A reference is what is used to describe the pointer to the memory location where the Object resides.
- A variable is a means by which you can access that memory location within your application (its value is "variable"). While a variable can only point to a single memory address (if its not null), it may change and point to different locations through out the life cycle of the application