I think that might be a bit too broad of a take away. I hate to be a pedant but C# allows user defined value types and I'm sure there are other GC'd languages that aren't as reference type heavy as Java. I think it would be a more fair statement if you replaced "garbage collected environments" with Java. I say "more fair" because I don't think I know any serious Java devs who don't understand the difference between reference and value types. I could just be lucky with who have crossed my path though.
EDIT: After thinking about it a little, most of the Java people I know have at least some embedded or native background. This could be a reason. I don't know what the market over all is like.
Consider the other direction from Java, into the fully dynamic languages. Many of those give you even less ability to control heap vs. stack allocations than Java does and often present an everything-is-a-reference facade even on things that are often optimized to stack objects (Fixnum in Ruby for eg).
But yes, a java programmer with embedded or native background would have a better understanding of this than people who learned Java first, which is what I'm really addressing here. And in the OP on SE you can clearly see that this is a big part of that person's confusion.
EDIT: After thinking about it a little, most of the Java people I know have at least some embedded or native background. This could be a reason. I don't know what the market over all is like.