Here's a counter-question for your Java friend,
Why do I have to deal with "NullPointerException"s all the freaking time in a language that supposedly lacks pointers? It seems to me that Java kept the pointers and simply dropped the syntax, which helped inexperienced programmers but just confused anyone who had ever worked with any other language.
I think my favorite system when it comes to this is C++ with their & pass by reference... it has most of the flexibility with pointers minus a lot of the headaches (and unlike Java, they leave it totally up to you if you'd like to revert to ordinary pointers for whatever obscure task you have where & references won't cut it.)