I just want to add my 2 cents in here.

I think deciding to pick which language you want to use is depend on your requirements.

If speed is not an issue, and portability is a must, than Java would be the best choice.

If speed is an issue, and portability is also a must, than C++ would be a better choice.
To achieve portablility in C++, I use ACE (adaptive communication environment).

And of course there're many other scenerios. Maybe you need to use CORBA, ICE or COM to serve as a bridge to provide language transparency.

Also, I don't think C++ is a learning language. The language that was designed for learning purpose was Pascal. C++ is now used as a learning language is probably because that it is widely use, and also to learn C++, you must learn how to handle memory managements, pointers and references, but if you learn Java first, you'll skip all these important things.

It's always easy to switch from C++ to Java, but for a Java developer to switch to C++, it will be a pain.

oh, one more thing, if you think that you don't have to worry about memory management in Java, then you're wrong, because it's possible to get memory leak in Java. If any of you're interested to know why you can create a memory leak in Java, I can provide more details, or you can read the "Effective Java" book written by Joshua Bloch.