For learning, I'd suggest Java. For REAL game programming, I'd suggest C++. Java can do a lot of things that people used to claim were impossible.
To claim something is impossible for a turing complete language is silly; infeasible is more likely. I've seen some real impressive stuff done in BASIC but it was likely much much more work than it was worth and would have been a lot easier in another language. Or like BYOND with the ray casting stuff. It works, just not well to be used decently in a game. That said I don't really think that applies to Java which is more than capable of doing any type of application it's just going to eat up more resources and be slower than the same thing done properly in C/C++.
There's ups and downs,
Yep if you're writing code that needs to run on a large range of micro controllers Java is certainly the language of choice as it is good at being cross platform and if that's your profession it'll probably be the language you'll be working with.
Don't listen to the zealots and fanboys. Both languages have their ups and downs.
Well I think everyone is going to be biased you just have to choose who seems the most reasonable about it and which language fits the needs of what you want to do. I personally dislike the Java framework especially when it comes to stuff like GUIs since in it's attempt to be cross platform you just get GUIs that do work on everything they're just awkward to use on everything since it can't properly make use of OS specific functionality so you're left with stuff which doesn't quite respond like you think it should. Plus I don't like the whole mentality of blocking off the programmer from low level functionality to save them. With something like C# which is very similar you at least can designate sections and variables to be located in unmanaged memory, take the gloves off, and do some serious low level optimizations and tricks which you just can't do in Java. The only thing you can do in Java is learn how it works well enough so that you don't run into pitfalls which drag your program down over inane things which don't make sense unless you know how Java is working underneath.
I don't like Java but it is by no means a bad language to learn from and it's good to pick up the OO concepts which it enforces. However anyone who plans to do serious programming work should eventually get their hands dirty and learn the low level concepts even if they don't directly use them much or at all because it helps you understand how things work which in turn lets you know what kinds of things will be fast and what won't along with a better understand of how memory works and such. I just think it's better early on before you get too attached to the crutches high level languages give you.
It's a nicer syntax, but it gobbles system resources like Oprah at an all you can eat buffet.
There's ups and downs, and undoubtedly a lot of people are going to have their preference, and programmers tend to be rather passionate (Read: self-righteous morons) about their favourite thing. This is why the OS flamewars and console flamewars always turn out the same.
Don't listen to the zealots and fanboys. Both languages have their ups and downs.