You sort of have it backwards. Java was created to be portable (can run the same code on many different platforms), clean syntax (based closely on C++), safe (Java runs inside a "virtual machine" on top of the host operating system) and open (source: <i>Exploring Java</i>. Niemeyer and Peck. O'Reilly. 1997).
So if you learn either, you'll find that the other will follow without too much trouble. You will spend your time learning the differences between the two rather than re-learning everything from scratch. That said, the differences are not trivial. Java was designed later than C++ and with different goals. In order to achieve those goals Java uses a different design. Some notable differences (you may have to check Wikipedia for some of these points):
Java has no pointers: in C and C++ you can talk about *where* in memory something is stored, not just *what* is stored there. Think of the difference between a house and a street address. The actual house is what contains all the people (or pets, pots and pans, etc.), and the street address tells you where that house can be found. To extend my metaphor farther, you also have to know what kind of address you have. Apartments have additional numbers (telling you what apartment is at an address), or foreign addresses may not have a zip code (etc. etc). In C or C++ pointers point to a type (like an integer, a character, etc.). You can add one to an address (in the house example, this would get you the next-door neighbor). There is a lot more to this, but you should get an impression.
Java has automatic memory management. When you ask for a new object in Java:
String person = "John Doe";
It allocates (frees up) memory to use for those characters that will constitute the string. A similar thing in C would be:
person = (char *) malloc(10);
person = "John Doe\n";
What happened here is that we made a pointer to a character (char *) then we Memory ALLOCated space for 10 characters and told C that we want character pointers. Then we assigned some characters to that place.
Java is garbage collected: This means that after we go around allocating memory for a while, Java stops periodically and checks to see that we still need it. If it finds unused memory (we don't hold onto anything that would need that memory), it frees it up again. This eliminates a class of error called a "memory leak," or asking for memory, but never giving it back.
Java also makes sure that you don't go past the ends of arrays. This can be nasty in C, resulting in a core dump or worse. This is because C will happily overwrite space that has already been set aside for other things. In particularly awful cases, this lets malicious users insert their own code into your program, by "slipping" it in after your allocated space was supposed to end.
I hope this gives you a place to start when people talk about the differences between the two.