It's a copy, and you can't have a string
that's a reference to part of another string. A .net string isn't backed by an array, it contains the char data inline. i.e. it is a variable length class, similar to an array.
While that sub-reference model is a possible implementation (I think java strings are just slices into char arrays), it can lead to strange behavior, where keeping a small substring keeps the whole string in memory, a common pitfall with java substrings. I guess the .net designers wanted to avoid such issues.
You can use your own string like type that has this property. For example you could work on slices into a char array with ArraySegment<char>
.