I’m sure there are excellent online articles, but here’s my own learning note.
Java “new” always hits Heap, period. Simple and clean.
C++ has array-new, placement-new, and class-specific-new. C++ “new” almost always hits the heap except
– except placement-new
– except you can customize op-new for your class to hit your allocator.
C# “new” doesn’t always mean Heap. The code “new MyStruct” usually hits the stack rather than the heap. See P55[[c#precisely]] for a nice diagram.
C# actually gives 3 unrelated (mildly confusion) meanings to the “new” keyword. One is the Java meaning. The 2nd meaning is “hide base type Member” and can apply to
* virtual methods — Most confusing
* non-virtual methods
* nested classes/interfaces
“Type” can be a base interface.
3rd meaning – select-new creates an instance of an anonymous type . See http://www.dotnetperls.com/select-new. http://stackoverflow.com/questions/2263242/select-new-keyword-combination is a summary of select-new
 java also let’s you create an instance of an anonymous type but you need to specify the supertype.