This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Well, not that. Local variables are stored on the stack, and they take the same amount of space whether or not they are initialized. That isn't to say that instantiating objects doesn't take memory space, but those are stored in heap memory, and the local variables just reference them. What happens in other languages, like C++, is that uninitialized variables just hold whatever random data was at the memory location they are using, and so errors can be very hard to catch. Something might work fine, and then you recompile and it breaks.
Java decided that fields would be implicitly initialized to 0, false, null, etc., based on type, and that local variables would have to be initialized before being used, otherwise the compiler would complain. Why the difference between fields and local variables? I can't actually remember. I've been doing it so long, it just seems natural to me.