The mythical "sufficiently smart complier" can remove these indirections, but no current compiler can do it perfectly, as doing so requires generative the copious amounts of object code that C++ is so roundly criticized for (templates). GHC is pretty good at removing these indirections. I understand C# compilers are as well. I've not used Java much but isn't there some issue where you can't store primitive integers in a collection because they don't inherit from the base Object type and/or the JVM doesn't support unboxed objects?* This is the same kind of annoyance you have to deal with in Haskell to get fast-as-possible performance (i.e. using types which are not polymorphism-friendly thus decreasing code reuse and increasing verbosity) so in that way I think they are equal with regards to the performance/brevity trade-off.
* I'm sure this has probably been fixed in some recent version of Java but it's still illustrative of why garbage collection imposes a real performance impact that C and C++ just don't have to deal with.