I used reflection to look at the internal fields of System.String and I found three fields:
m_arrayLength
m_stringLength
m_firstChar
I don\'t
I'd be thinking immediately that m_firstChar
is not the first character, rather a pointer to the first character. That would make much more sense (although, since I'm not privy to the source, I can't be certain).
It makes little sense to store the first character of a string unless you want a blindingly fast s.substring(0,1)
operation :-) There's a good chance the characters themselves (that the three fields allude to) will be allocated separately from the actual object.