going from C++ to java, I have to say I do like the GC, but only because it allows me to be lazy. I do believe, however, that it's a terrible habit to get into, and even worse to teach to fresh programmers... no matter what you think, that memory has to be taken care of. somebody has to do it. I personally would rather do it myself.
As far as java's forced OOP, from a learning programmer's point of view, System.out.print() is the same as printf(), so the learning still doesn't take place. Just because you tell a new programmer they're using a class doesn't mean they now know how to write an OOP--that's a big point of using classes--you can use it without knowing how it works.
and as far as I'm concerned, just because you use cout or System.out.println in your program doesn't make your program OO. for example, a simple hello world program (see below). I wouldn't consider that an OOP. and it's a good point for how OOP isn't always the best way to go. if anything, C++ tells you when it's a good time to use OOP and when it's not.
Code:
#include<iostream>
int main()
{
std::cout<<"Hello World";
return 0;
}