string is pretty much what is told but why you are able to do this
is for consistency but the allocation is not in heap and its not used as reference and the simple reason I can think of is the compiler never knows what is the type (reference / value) and so for basic types its always the value type.