Most successful high-level languages like recent incarnations of BASIC and C are more or less equal as far as capabilities and functionality are concerned (although Microsoft did a good job of failing to implement the use of pointers in Visual Basic). For the most part, no programming language is "better" than another, per se.
But in terms of C++ and Java, you'll be happier with C++, or perhaps just plain ol' C (which isn't a WHOLE lot different, but more straight-forward). Java is almost entirely object-oriented, which makes simple tasks like CPU emulation a hassle because you have references running rampant all over the place. Why would it need a garbage collector? Think about it.
With C, you'll be able to manage your program's memory on a low level as well as compile to native system code, which Java can't do. The net result is a faster program with higher flexibility and functionality. C is more approperiate for emulator programming than Java.